云信发送消息相关
@ -15,6 +15,7 @@ import {
|
|||||||
V2NIMDataSyncType,
|
V2NIMDataSyncType,
|
||||||
V2NIMEnableServiceType,
|
V2NIMEnableServiceType,
|
||||||
V2NIMError,
|
V2NIMError,
|
||||||
|
V2NIMKickedOfflineDetail,
|
||||||
V2NIMLoginStatus,
|
V2NIMLoginStatus,
|
||||||
V2NIMMessageRevokeNotification
|
V2NIMMessageRevokeNotification
|
||||||
} from '@nimsdk/base';
|
} from '@nimsdk/base';
|
||||||
@ -23,6 +24,8 @@ import { KitLogger } from './logger/AppLogger';
|
|||||||
import { LoggerKitImpl } from './logger/LoggerKitImpl';
|
import { LoggerKitImpl } from './logger/LoggerKitImpl';
|
||||||
import { ChatRepo } from './repo/ChatRepo';
|
import { ChatRepo } from './repo/ChatRepo';
|
||||||
import { saveLocalRevokeMessageFormOther } from './utils/MessageUtils';
|
import { saveLocalRevokeMessageFormOther } from './utils/MessageUtils';
|
||||||
|
import { router } from '@kit.ArkUI';
|
||||||
|
import { HMRouterMgr } from '@hadss/hmrouter';
|
||||||
|
|
||||||
export const currentConversationChanged: string = 'CurrentConversationChanged'
|
export const currentConversationChanged: string = 'CurrentConversationChanged'
|
||||||
|
|
||||||
@ -57,7 +60,13 @@ export class ChatKitClient {
|
|||||||
* 可用于判断网络是否断开
|
* 可用于判断网络是否断开
|
||||||
*/
|
*/
|
||||||
static connectBroken() {
|
static connectBroken() {
|
||||||
return ChatKitClient.nim.loginService.getConnectStatus() !== V2NIMConnectStatus.V2NIM_CONNECT_STATUS_CONNECTED
|
if(ChatKitClient.nim!=null&&ChatKitClient.nim!=undefined&&ChatKitClient.nim.loginService!=null&&ChatKitClient.nim.loginService!=undefined)
|
||||||
|
{
|
||||||
|
return ChatKitClient.nim.loginService.getConnectStatus() !== V2NIMConnectStatus.V2NIM_CONNECT_STATUS_CONNECTED
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -146,7 +155,9 @@ export class ChatKitClient {
|
|||||||
ChatRepo.offRevokeMessage(ChatKitClient.onRevokeFun)
|
ChatRepo.offRevokeMessage(ChatKitClient.onRevokeFun)
|
||||||
ChatKitClient.nim.conversationService?.off('onSyncFinished', ChatKitClient.onSyncFinishedFun)
|
ChatKitClient.nim.conversationService?.off('onSyncFinished', ChatKitClient.onSyncFinishedFun)
|
||||||
ChatKitClient.nim.loginService.off('onDataSync', ChatKitClient.dataSyncFun)
|
ChatKitClient.nim.loginService.off('onDataSync', ChatKitClient.dataSyncFun)
|
||||||
|
ChatKitClient.nim.loginService.off('onKickedOffline', (detail: V2NIMKickedOfflineDetail) => {
|
||||||
|
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -157,6 +168,15 @@ export class ChatKitClient {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
console.info("netease ChatKitClient initListener ");
|
console.info("netease ChatKitClient initListener ");
|
||||||
|
ChatKitClient.nim.loginService.on("onKickedOffline", (detail: V2NIMKickedOfflineDetail) => {
|
||||||
|
// const detail = ChatKitClient.nim.loginService.getKickedOfflineDetail()
|
||||||
|
console.log('Response onKickedOffline'+detail.clientType+' 22 '+detail.customClientType)
|
||||||
|
HMRouterMgr.removeAll()
|
||||||
|
router.replaceUrl({
|
||||||
|
url: 'pages/LoginPage/LoginPage', // 目标url
|
||||||
|
},router.RouterMode.Single)
|
||||||
|
router.clear()
|
||||||
|
})
|
||||||
// 数据同步监听
|
// 数据同步监听
|
||||||
ChatKitClient.nim.conversationService?.on('onSyncFinished', ChatKitClient.onSyncFinishedFun)
|
ChatKitClient.nim.conversationService?.on('onSyncFinished', ChatKitClient.onSyncFinishedFun)
|
||||||
ChatKitClient.nim.loginService.on('onDataSync', ChatKitClient.dataSyncFun)
|
ChatKitClient.nim.loginService.on('onDataSync', ChatKitClient.dataSyncFun)
|
||||||
|
|||||||
@ -13,7 +13,8 @@
|
|||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
'@nimkit/markdown': "1.1.0",
|
'@nimkit/markdown': "1.1.0",
|
||||||
"@itcast/basic":"file:../commons/basic"
|
"@itcast/basic":"file:../commons/basic",
|
||||||
// 用于嵌套对象@Type反射
|
// 用于嵌套对象@Type反射
|
||||||
|
"home": "file:../features/Home"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ import {
|
|||||||
import { NECameraSelectView } from '../view/NECameraSelectView';
|
import { NECameraSelectView } from '../view/NECameraSelectView';
|
||||||
import { common } from '@kit.AbilityKit';
|
import { common } from '@kit.AbilityKit';
|
||||||
import { cameraPicker } from '@kit.CameraKit';
|
import { cameraPicker } from '@kit.CameraKit';
|
||||||
import { LengthMetrics, window } from '@kit.ArkUI';
|
import { LengthMetrics, promptAction, window } from '@kit.ArkUI';
|
||||||
import { NERectData } from '../model/NERectData';
|
import { NERectData } from '../model/NERectData';
|
||||||
import { MessageOperationView } from '../view/MessageOperationView';
|
import { MessageOperationView } from '../view/MessageOperationView';
|
||||||
import { MessageOperationItem, MessageOperationType } from '../model/MessageOperationItem';
|
import { MessageOperationItem, MessageOperationType } from '../model/MessageOperationItem';
|
||||||
@ -78,12 +78,16 @@ import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInput
|
|||||||
import { hdHttp, HdResponse,BasicConstant, authStore, preferenceStore, ChatParam} from '@itcast/basic'
|
import { hdHttp, HdResponse,BasicConstant, authStore, preferenceStore, ChatParam} from '@itcast/basic'
|
||||||
import { HashMap } from '@kit.ArkTS';
|
import { HashMap } from '@kit.ArkTS';
|
||||||
import { customAttachment } from '../view/MessageComponentBuilder'
|
import { customAttachment } from '../view/MessageComponentBuilder'
|
||||||
|
import { HMRouter, HMRouterMgr, HMRouterPathCallback, HMRouterPathInfo } from '@hadss/hmrouter';
|
||||||
|
@HMRouter({
|
||||||
|
pageUrl: 'ChatP2PPage'
|
||||||
|
})
|
||||||
@ComponentV2
|
@ComponentV2
|
||||||
export struct ChatP2PPage {
|
export struct ChatP2PPage {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
pathStack: NavPathStack = new NavPathStack()
|
||||||
sessionId=''//患者的云信id
|
sessionId=''//患者的云信id
|
||||||
patientUuid=''//患者uuid
|
patientUuid=''//患者uuid
|
||||||
|
@Local rightButtonEnable:boolean=true
|
||||||
@Local chat_state:string=''
|
@Local chat_state:string=''
|
||||||
@Local gdxz_sessionType:string= preferenceStore.getItemString('gdxz_sessionType')
|
@Local gdxz_sessionType:string= preferenceStore.getItemString('gdxz_sessionType')
|
||||||
@Local statusBarHeight:number=0
|
@Local statusBarHeight:number=0
|
||||||
@ -113,7 +117,7 @@ export struct ChatP2PPage {
|
|||||||
navBarHeight: number = 80;
|
navBarHeight: number = 80;
|
||||||
// 底部输入框以及固定按钮操作栏高度
|
// 底部输入框以及固定按钮操作栏高度
|
||||||
@Local bottomHeight: number = 65;
|
@Local bottomHeight: number = 65;
|
||||||
bottomMargin: number = 100;
|
@Local bottomMargin: number = 100;
|
||||||
// bottomMargin: number = 10;
|
// bottomMargin: number = 10;
|
||||||
bottomWithReplyHeight: number = 135;
|
bottomWithReplyHeight: number = 135;
|
||||||
controller: RichEditorController = new RichEditorController()
|
controller: RichEditorController = new RichEditorController()
|
||||||
@ -177,7 +181,34 @@ export struct ChatP2PPage {
|
|||||||
})
|
})
|
||||||
teachDialog: CustomDialogController = new CustomDialogController({
|
teachDialog: CustomDialogController = new CustomDialogController({
|
||||||
builder: TeachDialog({
|
builder: TeachDialog({
|
||||||
|
imgCallBack:()=>{
|
||||||
|
const pathInfo1: HMRouterPathInfo = {
|
||||||
|
pageUrl: 'TuwenCompPage',
|
||||||
|
|
||||||
|
};
|
||||||
|
const callback: HMRouterPathCallback = {
|
||||||
|
onResult: (popInfo: PopInfo) => {
|
||||||
|
const result = popInfo.result as string;
|
||||||
|
this.sendHelloMessage(result,BasicConstant.Teach);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
HMRouterMgr.push(pathInfo1,callback)
|
||||||
|
|
||||||
|
},
|
||||||
|
videoCallBack:()=>{
|
||||||
|
const pathInfo1: HMRouterPathInfo = {
|
||||||
|
pageUrl: 'VideoTeach',
|
||||||
|
|
||||||
|
};
|
||||||
|
const callback: HMRouterPathCallback = {
|
||||||
|
onResult: (popInfo: PopInfo) => {
|
||||||
|
const result = popInfo.result as string;
|
||||||
|
this.sendHelloMessage(result,BasicConstant.VideoTeach);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
HMRouterMgr.push(pathInfo1,callback)
|
||||||
|
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
cornerRadius: 4,
|
cornerRadius: 4,
|
||||||
width: '70%',
|
width: '70%',
|
||||||
@ -420,12 +451,30 @@ export struct ChatP2PPage {
|
|||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
sendHelloMessage(rawAttach:string,messageType:string)//发送初始消息
|
||||||
|
{
|
||||||
|
this.chatViewModel.sendCustomMessage(messageType, rawAttach)
|
||||||
|
}
|
||||||
|
paramData()
|
||||||
|
{
|
||||||
|
let param = HMRouterMgr.getCurrentParam() as ChatParam;
|
||||||
|
|
||||||
|
this.conversationId = param.conversationId;
|
||||||
|
this.showName= param.name+'';
|
||||||
|
this.chat_state=param.chat_state
|
||||||
|
this.loadChatData();
|
||||||
|
if('true'==param.hasMessage)
|
||||||
|
{
|
||||||
|
this.sendHelloMessage(param.rawAttach,param.messageType)
|
||||||
|
}
|
||||||
|
if(this.chat_state=='3')
|
||||||
|
{
|
||||||
|
this.bottomMargin=10
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
aboutToAppear() {
|
aboutToAppear() {
|
||||||
if(this.chat_state=='3')
|
|
||||||
{
|
|
||||||
this.bottomHeight==0
|
|
||||||
}
|
|
||||||
|
|
||||||
NEEmojiManager.instance.setup();
|
NEEmojiManager.instance.setup();
|
||||||
DeviceUtils.rootDirPath = getContext(this).filesDir
|
DeviceUtils.rootDirPath = getContext(this).filesDir
|
||||||
@ -461,6 +510,7 @@ export struct ChatP2PPage {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
this. paramData()
|
||||||
this.initDialog()
|
this.initDialog()
|
||||||
this. getOutList()
|
this. getOutList()
|
||||||
|
|
||||||
@ -576,19 +626,30 @@ export struct ChatP2PPage {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Builder
|
|
||||||
build() {
|
build() {
|
||||||
NavDestination() {
|
// NavDestination() {
|
||||||
|
Column()
|
||||||
|
{
|
||||||
NavigationBackBuilder({
|
NavigationBackBuilder({
|
||||||
title:this.showName ,
|
title:this.showName ,
|
||||||
rightButtonIcon: this.gdxz_sessionType==BasicConstant.general ? $r('app.media.more') :undefined,
|
rightButtonIcon: this.gdxz_sessionType==BasicConstant.general ? $r('app.media.more') :undefined,
|
||||||
rightButtonTitle: this.gdxz_sessionType==BasicConstant.consult && this.chat_state!='3'? '关闭会话' : undefined,
|
rightButtonTitle: this.gdxz_sessionType==BasicConstant.consult && this.chat_state!='3'? '关闭会话' : undefined,
|
||||||
|
rightButtonColor:this.rightButtonEnable?$r('app.color.top_title'):$r('app.color.common_gray_03'),
|
||||||
top:this.statusBarHeight,
|
top:this.statusBarHeight,
|
||||||
rightButtonAction: () => {
|
rightButtonAction: () => {
|
||||||
this.goToSettingPage(this.pathStack)
|
if( this.gdxz_sessionType==BasicConstant.consult && this.chat_state!='3'&&this.rightButtonEnable)
|
||||||
|
{
|
||||||
|
this.closeConsult()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.goToSettingPage(this.pathStack)
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
leftButtonAction: () => {
|
leftButtonAction: () => {
|
||||||
this.pathStack.pop()
|
// this.pathStack.pop()
|
||||||
|
HMRouterMgr.pop()
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -783,7 +844,7 @@ export struct ChatP2PPage {
|
|||||||
top: { anchor: "chatPageListView", align: VerticalAlign.Bottom },
|
top: { anchor: "chatPageListView", align: VerticalAlign.Bottom },
|
||||||
})
|
})
|
||||||
|
|
||||||
if (this.hideInput === false && !this.showMultiSelect&&this.chat_state!='3') {
|
if (this.hideInput === false && !this.showMultiSelect&&this.chat_state!='3'&&this.chat_state!='333') {
|
||||||
NEChatInputView({
|
NEChatInputView({
|
||||||
controller: this.controller,
|
controller: this.controller,
|
||||||
placeHolder: (this.chatUserInfo.conversationName ?? '').length > 15 ?
|
placeHolder: (this.chatUserInfo.conversationName ?? '').length > 15 ?
|
||||||
@ -949,15 +1010,26 @@ export struct ChatP2PPage {
|
|||||||
|
|
||||||
}
|
}
|
||||||
else if (data.type == NEChatMoreOperationType.Reply) {
|
else if (data.type == NEChatMoreOperationType.Reply) {
|
||||||
this.pathStack.pushPathByName(
|
const pathInfo1: HMRouterPathInfo = {
|
||||||
'QuckMessagePage',
|
pageUrl: 'QuickMessagePage',
|
||||||
{},
|
|
||||||
(popInfo: PopInfo) => { // 接收B返回的参数
|
};
|
||||||
const result = popInfo.result as string;
|
const callback: HMRouterPathCallback = {
|
||||||
|
onResult: (popInfo: PopInfo) => {
|
||||||
|
const result = popInfo.result as string;
|
||||||
this.setInputContent(result);
|
this.setInputContent(result);
|
||||||
// console.log(`B页面返回数据:${result}`);
|
}
|
||||||
}
|
};
|
||||||
)
|
HMRouterMgr.push(pathInfo1,callback)
|
||||||
|
// this.pathStack.pushPathByName(
|
||||||
|
// 'QuckMessagePage',
|
||||||
|
// {},
|
||||||
|
// (popInfo: PopInfo) => { // 接收B返回的参数
|
||||||
|
// const result = popInfo.result as string;
|
||||||
|
// this.setInputContent(result);
|
||||||
|
// // console.log(`B页面返回数据:${result}`);
|
||||||
|
// }
|
||||||
|
// )
|
||||||
}
|
}
|
||||||
else if (data.type == NEChatMoreOperationType.Teach) {
|
else if (data.type == NEChatMoreOperationType.Teach) {
|
||||||
this.teachDialog.open()
|
this.teachDialog.open()
|
||||||
@ -1091,20 +1163,59 @@ export struct ChatP2PPage {
|
|||||||
.zIndex(1)
|
.zIndex(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
.hideTitleBar(true)
|
// }
|
||||||
.onReady((context: NavDestinationContext) => {
|
|
||||||
this.pathStack = context.pathStack
|
// .hideTitleBar(true)
|
||||||
let param = this.pathStack.getParamByName("ChatP2PPage") as ChatParam[];
|
// .onReady((context: NavDestinationContext) => {
|
||||||
if (param.length > 0) {
|
// this.pathStack = context.pathStack
|
||||||
this.conversationId = param[0].conversationId;
|
// let param = this.pathStack.getParamByName("ChatP2PPage") as ChatParam[];
|
||||||
this.showName= param[0].name+'';
|
// if (param.length > 0) {
|
||||||
this.chat_state=param[0].chat_state
|
// this.conversationId = param[0].conversationId;
|
||||||
this.loadChatData();
|
// this.showName= param[0].name+'';
|
||||||
} else {
|
// this.chat_state=param[0].chat_state
|
||||||
this.pathStack.removeByName("ChatP2PPage")
|
// this.loadChatData();
|
||||||
|
// if('true'==param[0].hasMessage&&BasicConstant.consult==param[0].gdxz_sessionType)
|
||||||
|
// {
|
||||||
|
// this.sendHelloMessage(param[0].rawAttach)
|
||||||
|
// }
|
||||||
|
// if(this.chat_state=='3')
|
||||||
|
// {
|
||||||
|
// this.bottomMargin=10
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// } else {
|
||||||
|
// this.pathStack.removeByName("ChatP2PPage")
|
||||||
|
// }
|
||||||
|
// }).onHidden(() => {
|
||||||
|
// AudioPlayerManager.instance.stopPlayAll()
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
|
||||||
|
closeConsult()
|
||||||
|
{
|
||||||
|
|
||||||
|
hdHttp.post<string>(BasicConstant.closeConsult, {
|
||||||
|
uuid:preferenceStore.getItemString('gdxz_consult_uuid'),
|
||||||
|
|
||||||
|
} as extraData).then(async (res: HdResponse<string>) => {
|
||||||
|
|
||||||
|
let json = JSON.parse(res+'') as Record<string, string>;
|
||||||
|
let data=json.code as string
|
||||||
|
if(data=='1')
|
||||||
|
{
|
||||||
|
promptAction.showToast({ message: "您已关闭会话,谢谢您的回答!" });
|
||||||
|
this.rightButtonEnable=false
|
||||||
|
this.chat_state='333'
|
||||||
|
// this.chat_state='3'
|
||||||
|
this.bottomMargin=10
|
||||||
}
|
}
|
||||||
}).onHidden(() => {
|
else {
|
||||||
AudioPlayerManager.instance.stopPlayAll()
|
promptAction.showToast({ message: json.message })
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1430,11 +1541,15 @@ export struct ChatP2PPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 跳转页面入口函数
|
// 跳转页面入口函数
|
||||||
@Builder
|
// @Builder
|
||||||
export function ChatP2PPageBuilder() {
|
// export function ChatP2PPageBuilder() {
|
||||||
ChatP2PPage()
|
// ChatP2PPage()
|
||||||
}
|
// }
|
||||||
|
|
||||||
export interface patientDetailExtraData{
|
export interface patientDetailExtraData{
|
||||||
patientUuid:string
|
patientUuid:string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface extraData{
|
||||||
|
uuid:string
|
||||||
}
|
}
|
||||||
1492
chatkit_ui/src/main/ets/pages/ChatP2PPageCopy.ets
Normal file
@ -8,6 +8,11 @@ import { hdHttp, HdResponse,BasicConstant, authStore} from '@itcast/basic'
|
|||||||
import { BusinessError } from '@kit.BasicServicesKit';
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
import { promptAction,LengthMetrics } from '@kit.ArkUI'
|
import { promptAction,LengthMetrics } from '@kit.ArkUI'
|
||||||
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet'
|
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet'
|
||||||
|
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
|
||||||
|
|
||||||
|
@HMRouter({
|
||||||
|
pageUrl: 'QuickMessagePage'
|
||||||
|
})
|
||||||
@ComponentV2
|
@ComponentV2
|
||||||
export struct QuickMessagePage {
|
export struct QuickMessagePage {
|
||||||
@Local delectuuid:string=''
|
@Local delectuuid:string=''
|
||||||
@ -29,13 +34,14 @@ export struct QuickMessagePage {
|
|||||||
width: '70%',
|
width: '70%',
|
||||||
})
|
})
|
||||||
build() {
|
build() {
|
||||||
NavDestination() {
|
// NavDestination() {
|
||||||
Column() {
|
Column() {
|
||||||
NavigationBackBuilder({
|
NavigationBackBuilder({
|
||||||
title:$r('app.string.reply'),
|
title:$r('app.string.reply'),
|
||||||
top:this.statusBarHeight,
|
top:this.statusBarHeight,
|
||||||
leftButtonAction: () => {
|
leftButtonAction: () => {
|
||||||
this.pathStack.pop()
|
// this.pathStack.pop()
|
||||||
|
HMRouterMgr.pop()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
Row(){
|
Row(){
|
||||||
@ -65,7 +71,8 @@ export struct QuickMessagePage {
|
|||||||
Text(item.replystr).fontSize(16).fontColor($r('app.color.common_gray_01')).padding(20).textAlign(TextAlign.Start).width('100%')
|
Text(item.replystr).fontSize(16).fontColor($r('app.color.common_gray_01')).padding(20).textAlign(TextAlign.Start).width('100%')
|
||||||
}
|
}
|
||||||
.onClick(()=>{
|
.onClick(()=>{
|
||||||
this.pathStack.pop(item.replystr)
|
// this.pathStack.pop(item.replystr)
|
||||||
|
HMRouterMgr.pop({param:item.replystr})
|
||||||
})
|
})
|
||||||
.gesture(
|
.gesture(
|
||||||
LongPressGesture({
|
LongPressGesture({
|
||||||
@ -92,13 +99,13 @@ export struct QuickMessagePage {
|
|||||||
}
|
}
|
||||||
.width('100%')
|
.width('100%')
|
||||||
.height('100%')
|
.height('100%')
|
||||||
}
|
// }
|
||||||
.hideTitleBar(true)
|
// .hideTitleBar(true)
|
||||||
.backgroundColor(Color.White)
|
// .backgroundColor(Color.White)
|
||||||
.onReady((context: NavDestinationContext) => {
|
// .onReady((context: NavDestinationContext) => {
|
||||||
this.pathStack = context.pathStack
|
// this.pathStack = context.pathStack
|
||||||
|
//
|
||||||
})
|
// })
|
||||||
}
|
}
|
||||||
aboutToAppear(): void {
|
aboutToAppear(): void {
|
||||||
window.getLastWindow(getContext(this)).then(currentWindow => {
|
window.getLastWindow(getContext(this)).then(currentWindow => {
|
||||||
@ -216,11 +223,11 @@ struct DelectDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 跳转页面入口函数
|
// // 跳转页面入口函数
|
||||||
@Builder
|
// @Builder
|
||||||
export function QuickMessagePageBuilder() {
|
// export function QuickMessagePageBuilder() {
|
||||||
QuickMessagePage()
|
// QuickMessagePage()
|
||||||
}
|
// }
|
||||||
|
|
||||||
interface extraData{
|
interface extraData{
|
||||||
user_uuid:string
|
user_uuid:string
|
||||||
|
|||||||
@ -36,6 +36,9 @@ import { ChatInfo } from '../model/ChatInfo'
|
|||||||
import { Markdown } from '@nimkit/markdown'
|
import { Markdown } from '@nimkit/markdown'
|
||||||
import { BasicConstant,DataWebModel } from '@itcast/basic'
|
import { BasicConstant,DataWebModel } from '@itcast/basic'
|
||||||
import { router } from '@kit.ArkUI'
|
import { router } from '@kit.ArkUI'
|
||||||
|
import { videoTools } from 'home'
|
||||||
|
import { HMRouterMgr } from '@hadss/hmrouter'
|
||||||
|
|
||||||
@ComponentV2
|
@ComponentV2
|
||||||
export struct messageContent {
|
export struct messageContent {
|
||||||
@BuilderParam
|
@BuilderParam
|
||||||
@ -803,6 +806,7 @@ export struct customBuilder {
|
|||||||
@Local content:string=''
|
@Local content:string=''
|
||||||
@Local customType:string=''
|
@Local customType:string=''
|
||||||
@Local customUrl:string=''
|
@Local customUrl:string=''
|
||||||
|
@Local uuid:string=''
|
||||||
aboutToAppear(): void {
|
aboutToAppear(): void {
|
||||||
if (this.message) {
|
if (this.message) {
|
||||||
//
|
//
|
||||||
@ -812,6 +816,7 @@ export struct customBuilder {
|
|||||||
this.title=custom.gdxz_title
|
this.title=custom.gdxz_title
|
||||||
this.customType=custom.gdxz_type
|
this.customType=custom.gdxz_type
|
||||||
this.customUrl=custom.gdxz_url
|
this.customUrl=custom.gdxz_url
|
||||||
|
this.uuid=custom.gdxz_id
|
||||||
if(BasicConstant.CouTeach==custom.gdxz_type)
|
if(BasicConstant.CouTeach==custom.gdxz_type)
|
||||||
{
|
{
|
||||||
this.content='点击查看问题详情'
|
this.content='点击查看问题详情'
|
||||||
@ -891,6 +896,13 @@ export struct customBuilder {
|
|||||||
// intent.putExtra("isCloseAnswer", true);
|
// intent.putExtra("isCloseAnswer", true);
|
||||||
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
|
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
|
||||||
// UIUtils.getContext().startActivity(intent);
|
// UIUtils.getContext().startActivity(intent);
|
||||||
|
// router.pushUrl({
|
||||||
|
// url: 'pages/Netease/ConsultationDetailPage',
|
||||||
|
// params: { uuid: this.uuid, isHistory: 'true'}
|
||||||
|
// });
|
||||||
|
HMRouterMgr.push({ pageUrl: 'ConsultationDetailPage' , param: {
|
||||||
|
uuid: this.uuid, isHistory: 'true'
|
||||||
|
} })
|
||||||
}
|
}
|
||||||
else if(this.title!=null&&this.title.includes("互联网医院"))
|
else if(this.title!=null&&this.title.includes("互联网医院"))
|
||||||
{
|
{
|
||||||
@ -907,13 +919,10 @@ export struct customBuilder {
|
|||||||
if (this.customUrl.includes("video")){
|
if (this.customUrl.includes("video")){
|
||||||
// intent = new Intent(UIUtils.getContext(), VideoDetilActivity.class);
|
// intent = new Intent(UIUtils.getContext(), VideoDetilActivity.class);
|
||||||
// intent.putExtra("uuid", teachAttachment.getMessigeid());
|
// intent.putExtra("uuid", teachAttachment.getMessigeid());
|
||||||
|
videoTools.getVideoDetails(this.uuid)
|
||||||
}else {
|
|
||||||
// intent = new Intent(UIUtils.getContext(), NewsDetailActivity.class);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.customUrl.includes("outpatient_details")
|
else if (this.customUrl.includes("outpatient_details")
|
||||||
||this.customUrl.includes("wxPatient/index.htm#/outPatient")){
|
||this.customUrl.includes("wxPatient/index.htm#/outPatient")){
|
||||||
// intent.putExtra("title", "门诊详情");
|
// intent.putExtra("title", "门诊详情");
|
||||||
ToWeb(this.customUrl,'门诊详情')
|
ToWeb(this.customUrl,'门诊详情')
|
||||||
@ -925,6 +934,7 @@ export struct customBuilder {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
ToWeb(this.customUrl,'患教详情')
|
||||||
// intent.putExtra("newsTitle", teachAttachment.getTitle()+"");
|
// intent.putExtra("newsTitle", teachAttachment.getTitle()+"");
|
||||||
// intent.putExtra("kepuuuid", teachAttachment.getMessigeid());
|
// intent.putExtra("kepuuuid", teachAttachment.getMessigeid());
|
||||||
// intent.putExtra("title", "患教详情");
|
// intent.putExtra("title", "患教详情");
|
||||||
|
|||||||
@ -1,21 +1,5 @@
|
|||||||
{
|
{
|
||||||
"routerMap": [
|
"routerMap": [
|
||||||
{
|
|
||||||
"name": "ChatP2PPage",
|
|
||||||
"pageSourceFile": "src/main/ets/pages/ChatP2PPage.ets",
|
|
||||||
"buildFunction": "ChatP2PPageBuilder",
|
|
||||||
"data": {
|
|
||||||
"description": "this is p2p chat page"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "QuckMessagePage",
|
|
||||||
"pageSourceFile": "src/main/ets/pages/QuickMessagePage.ets",
|
|
||||||
"buildFunction": "QuickMessagePageBuilder",
|
|
||||||
"data": {
|
|
||||||
"description": "this is QuickMessagePage page"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ChatTeamPage",
|
"name": "ChatTeamPage",
|
||||||
"pageSourceFile": "src/main/ets/pages/ChatTeamPage.ets",
|
"pageSourceFile": "src/main/ets/pages/ChatTeamPage.ets",
|
||||||
|
|||||||
@ -15,6 +15,7 @@ interface NavigationBackBuilderParams {
|
|||||||
showDivideLine?: boolean;
|
showDivideLine?: boolean;
|
||||||
rightButtonTitle?: ResourceStr;
|
rightButtonTitle?: ResourceStr;
|
||||||
rightButtonColor?: ResourceColor;
|
rightButtonColor?: ResourceColor;
|
||||||
|
rightButtonEnable?: boolean;
|
||||||
rightButtonIcon?: Resource;
|
rightButtonIcon?: Resource;
|
||||||
rightButtonAction?: (() => void);
|
rightButtonAction?: (() => void);
|
||||||
backgroundColor?: ResourceColor;
|
backgroundColor?: ResourceColor;
|
||||||
@ -89,7 +90,7 @@ export function NavigationBackBuilder(params?: NavigationBackBuilderParams) {
|
|||||||
if (params?.rightButtonTitle) {
|
if (params?.rightButtonTitle) {
|
||||||
Text(params?.rightButtonTitle)
|
Text(params?.rightButtonTitle)
|
||||||
.fontSize(14)
|
.fontSize(14)
|
||||||
.fontColor(params?.rightButtonColor??Color.White)
|
.fontColor(Color.White)
|
||||||
.width(params?.buttonTextWidth ?? 80)
|
.width(params?.buttonTextWidth ?? 80)
|
||||||
.height(35)
|
.height(35)
|
||||||
.textAlign(TextAlign.Center)
|
.textAlign(TextAlign.Center)
|
||||||
@ -98,9 +99,10 @@ export function NavigationBackBuilder(params?: NavigationBackBuilderParams) {
|
|||||||
// })
|
// })
|
||||||
.borderRadius(4)
|
.borderRadius(4)
|
||||||
// .height(18)
|
// .height(18)
|
||||||
.backgroundColor($r('app.color.top_title'))
|
.backgroundColor(params?.rightButtonColor??$r('app.color.top_title'))
|
||||||
.margin({ right: 5 })
|
.margin({ right: 5 })
|
||||||
.onClick(params?.rightButtonAction)
|
.onClick(params?.rightButtonAction)
|
||||||
|
// .enabled(params?.rightButtonEnable??true)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -69,6 +69,10 @@
|
|||||||
{
|
{
|
||||||
"name": "patient_theme",
|
"name": "patient_theme",
|
||||||
"value": "#3cc7c0"
|
"value": "#3cc7c0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tab_text_nor",
|
||||||
|
"value": "#848284"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -87,4 +87,6 @@ export { ChangePhotoGrids } from './src/main/ets/components/ChangePhotoGrids'
|
|||||||
|
|
||||||
export { InputPopWindow } from './src/main/ets/Views/InputPopWindow'
|
export { InputPopWindow } from './src/main/ets/Views/InputPopWindow'
|
||||||
|
|
||||||
export { ChatExtModel,ChatParam } from './src/main/ets/models/ChatExtModel'
|
export { ChatExtModel,ChatParam } from './src/main/ets/models/ChatExtModel'
|
||||||
|
|
||||||
|
export { PatientListModel,PatientsData } from './src/main/ets/models/PatientListModel'
|
||||||
@ -158,20 +158,20 @@ export struct PerfactInputSheet {
|
|||||||
Text(this.inputPlaceholder)
|
Text(this.inputPlaceholder)
|
||||||
.fontColor('#444444')
|
.fontColor('#444444')
|
||||||
.backgroundColor(Color.White)
|
.backgroundColor(Color.White)
|
||||||
.padding({left:10,right:10})
|
.padding({left:10,right:10,bottom:20})
|
||||||
|
|
||||||
}
|
}
|
||||||
.backgroundColor(Color.White)
|
.backgroundColor(Color.White)
|
||||||
|
|
||||||
Text('').height(1).width('100%')
|
Text('').height(1).width('100%')
|
||||||
.backgroundColor($r('app.color.home_gray')).margin({top:10})
|
.backgroundColor($r('app.color.home_gray')).margin({top:10})
|
||||||
Row({ space: 20 }) {
|
Row() {
|
||||||
Text(this.cancelText)
|
Text(this.cancelText)
|
||||||
.fontSize(15)
|
.fontSize(15)
|
||||||
.fontColor(this.cancelColor)
|
.fontColor(this.cancelColor)
|
||||||
.textAlign(TextAlign.Center)
|
.textAlign(TextAlign.Center)
|
||||||
|
|
||||||
.width('45%').height(30)
|
.height(30).layoutWeight(1)
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
if(this.needcancelCallBack)
|
if(this.needcancelCallBack)
|
||||||
{
|
{
|
||||||
@ -191,11 +191,11 @@ export struct PerfactInputSheet {
|
|||||||
this.inputCallBack(this.inputText, this.inputTitle);
|
this.inputCallBack(this.inputText, this.inputTitle);
|
||||||
})
|
})
|
||||||
|
|
||||||
.width('45%').height(30)
|
.height(30).layoutWeight(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}.margin({ top: 10, bottom: 10 })
|
}.margin({ top: 10, bottom: 10 }).width('100%')
|
||||||
}
|
}
|
||||||
.width('80%').backgroundColor(Color.White)
|
.width('80%').backgroundColor(Color.White)
|
||||||
}.borderRadius(24)
|
}.borderRadius(24)
|
||||||
|
|||||||
@ -29,15 +29,17 @@ export struct HdSearchNav {
|
|||||||
isFocus:boolean = false;
|
isFocus:boolean = false;
|
||||||
@Prop
|
@Prop
|
||||||
placeholder:string = ''
|
placeholder:string = ''
|
||||||
|
@Prop
|
||||||
|
isLeftAction: boolean = false
|
||||||
@State textInputContent:string = ''
|
@State textInputContent:string = ''
|
||||||
|
// 添加左侧点击函数
|
||||||
|
private leftItemAction:()=> void = () => {};
|
||||||
build() {
|
build() {
|
||||||
Row() {
|
Row() {
|
||||||
Row() {
|
Row() {
|
||||||
Image(this.leftIcon)
|
Image(this.leftIcon)
|
||||||
.size({ width: 24, height: 24 })
|
.size({ width: 24, height: 24 })
|
||||||
.onClick(() => router.back())
|
.onClick(() =>this.isLeftAction? this.leftItemAction(): router.back())
|
||||||
.fillColor($r('app.color.black'))
|
.fillColor($r('app.color.black'))
|
||||||
}.size({ width: 40, height: 50 })
|
}.size({ width: 40, height: 50 })
|
||||||
|
|
||||||
|
|||||||
@ -81,6 +81,12 @@ export class BasicConstant {
|
|||||||
static readonly getInterrogation = BasicConstant.urlExpertAPI +"getInterrogation";// 一问多答 详情页
|
static readonly getInterrogation = BasicConstant.urlExpertAPI +"getInterrogation";// 一问多答 详情页
|
||||||
static readonly InterrogationPatientInfo = BasicConstant.urlExpertAPI +"InterrogationPatientInfo";// 一问多答 患者详情页
|
static readonly InterrogationPatientInfo = BasicConstant.urlExpertAPI +"InterrogationPatientInfo";// 一问多答 患者详情页
|
||||||
static readonly updateInterrogationAnswer = BasicConstant.urlExpertAPI+"updateInterrogationAnswer";// 一问多答 编辑回答
|
static readonly updateInterrogationAnswer = BasicConstant.urlExpertAPI+"updateInterrogationAnswer";// 一问多答 编辑回答
|
||||||
|
static readonly closeConsult= BasicConstant.urlExpert + "closeConsult";// 关闭公益咨询
|
||||||
|
static readonly polularScienceArticleListByKeywordsNew= BasicConstant.urlExpertApp + "polularScienceArticleListByKeywordsNew";// 患教学堂搜索
|
||||||
|
static readonly polularScienceArticleListInexpertNew= BasicConstant.urlExpertApp+ "polularScienceArticleListInexpertNew";// 患教学堂
|
||||||
|
static readonly patientVideoType= BasicConstant.urlExpertApp +"patientVideoType";// 患者视频类型列表
|
||||||
|
static readonly patientVideoByName= BasicConstant.urlExpertApp +"patientVideoByName";//患教视频科普分享
|
||||||
|
static readonly patientListByGBK= BasicConstant.urlExpertApp +"patientListByGBK";// 我的患者列表
|
||||||
static readonly province=['全国','北京市','天津市','河北省','山西省'
|
static readonly province=['全国','北京市','天津市','河北省','山西省'
|
||||||
,'内蒙古自治区','辽宁省','吉林省','黑龙江省','上海市','江苏省','浙江省'
|
,'内蒙古自治区','辽宁省','吉林省','黑龙江省','上海市','江苏省','浙江省'
|
||||||
,'安徽省','福建省','江西省','山东省','河南省','湖北省','湖南省','广东省',
|
,'安徽省','福建省','江西省','山东省','河南省','湖北省','湖南省','广东省',
|
||||||
|
|||||||
@ -12,5 +12,7 @@ export interface ChatParam extends ChatExtModel{
|
|||||||
name:string,//患者姓名
|
name:string,//患者姓名
|
||||||
conversationId:string,//最近会话id
|
conversationId:string,//最近会话id
|
||||||
chat_state:string//公益咨询状态
|
chat_state:string//公益咨询状态
|
||||||
|
rawAttach:string;//发送公益咨询首条消息
|
||||||
|
hasMessage:string;//是否需要发送一条消息
|
||||||
|
messageType:string;//发送消息的类型
|
||||||
}
|
}
|
||||||
37
commons/basic/src/main/ets/models/PatientListModel.ets
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { List } from '@kit.ArkTS';
|
||||||
|
export interface PatientListModel{
|
||||||
|
|
||||||
|
code:string;
|
||||||
|
data:PatientsData[];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export interface PatientsData{
|
||||||
|
mobile:string;// 手机号
|
||||||
|
realName:string;// 患者姓名
|
||||||
|
photo:string;// 患者头像路径
|
||||||
|
uuid:string;// 唯一标示
|
||||||
|
birthDate:string;// 患者出生日期
|
||||||
|
sex:number;// 患者性别(0.男 1.女)
|
||||||
|
type:number;// 类型//1.随访关系 2.包月服务关系 (type==2即为VIP)
|
||||||
|
provId:string;// 省id
|
||||||
|
cityId:string;// 市id
|
||||||
|
countyId:string;// 区县id
|
||||||
|
nation:string;// 民族
|
||||||
|
nickname:string;// 别名
|
||||||
|
note:string;// 备注内容
|
||||||
|
|
||||||
|
// 新的患者增加的
|
||||||
|
patientUuid:string;// 患者uuid
|
||||||
|
expertUuid:string;// 专家uuid
|
||||||
|
createDate:string;// 申请时间
|
||||||
|
content:string;// 申请内容
|
||||||
|
status:number;// 新的患者申请,状态(1.待审核2.审核通过3.拒绝 4.已过期)
|
||||||
|
join_date:string;//随访时间
|
||||||
|
diagnosis:string;//患病类型
|
||||||
|
sortLetters:string; // 显示数据拼音的首字母
|
||||||
|
isSelect:boolean;
|
||||||
|
}
|
||||||
|
|
||||||
BIN
commons/basic/src/main/resources/base/media/argee_commient.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
commons/basic/src/main/resources/base/media/arrow_right.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
commons/basic/src/main/resources/base/media/edit_patitent.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
commons/basic/src/main/resources/base/media/new_patient.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
commons/basic/src/main/resources/base/media/patientgroup.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
commons/basic/src/main/resources/base/media/read_commient.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
commons/basic/src/main/resources/base/media/search_no.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@ -84,6 +84,75 @@ class VideoTools {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getVideoDetails(video_uuid:string)
|
||||||
|
{
|
||||||
|
|
||||||
|
this.hashMap.clear();
|
||||||
|
this.hashMap.set('video_uuid', video_uuid)
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.videoDetail,this.hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
|
||||||
|
logger.info('Response videoDetail'+res);
|
||||||
|
let json:VideoDetailModel = JSON.parse(res+'') as VideoDetailModel;
|
||||||
|
if(json.video.polyv_uuid==null||json.video.polyv_uuid==undefined)
|
||||||
|
{
|
||||||
|
if(json.video.content!=null)
|
||||||
|
{
|
||||||
|
let content=json.video.content
|
||||||
|
let split = content.split("\"vid\" : ");
|
||||||
|
if (split.length<2){
|
||||||
|
split = content.split("'vid' : ");
|
||||||
|
if (split.length>1){
|
||||||
|
let split1 = split[1].split("'");
|
||||||
|
this.goPLVMediaPlayerOnlyVideoPage(split1[1],video_uuid)
|
||||||
|
|
||||||
|
}else {
|
||||||
|
promptAction.showToast({ message: '视频信息错误' })
|
||||||
|
this.goPLVMediaPlayerOnlyVideoPage('',video_uuid)
|
||||||
|
}
|
||||||
|
}else if(split.length>1){
|
||||||
|
let split1 = split[1].split("\"");
|
||||||
|
this.goPLVMediaPlayerOnlyVideoPage(split1[1],video_uuid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
promptAction.showToast({ message: '视频信息错误' })
|
||||||
|
this.goPLVMediaPlayerOnlyVideoPage('',video_uuid)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.goPLVMediaPlayerOnlyVideoPage(json.video.polyv_uuid,video_uuid)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.goPLVMediaPlayerOnlyVideoPage('',video_uuid)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async goPLVMediaPlayerOnlyVideoPage(vid:string,video_uuid:string)
|
||||||
|
{
|
||||||
|
const mediaResourcesResult = await runCatching(PLVMockMediaResourceData.getInstance().setupMediaResourcesFromLocal(vid,mockViewerParam))
|
||||||
|
if (mediaResourcesResult.success === false) {
|
||||||
|
promptAction.showToast({
|
||||||
|
message: `'视频数据初始化失败': ${mediaResourcesResult.error}`,
|
||||||
|
duration: seconds(3).toMillis()
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const mediaResource = mediaResourcesResult.data[0]
|
||||||
|
router.pushUrl({
|
||||||
|
url:'pages/VideoPage/PLVMediaPlayerOnlyVideoPage',
|
||||||
|
params: {
|
||||||
|
video_uuid:video_uuid,
|
||||||
|
param:new PLVMediaPlayerSingleVideoPageParam(mediaResource)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const videoTools = new VideoTools()
|
export const videoTools = new VideoTools()
|
||||||
@ -13,6 +13,6 @@
|
|||||||
"@nimsdk/base": "10.9.10",
|
"@nimsdk/base": "10.9.10",
|
||||||
"@nimkit/common": "file:../../common",
|
"@nimkit/common": "file:../../common",
|
||||||
"@nimkit/localconversationkit_ui": "file:../../localconversationkit_ui",
|
"@nimkit/localconversationkit_ui": "file:../../localconversationkit_ui",
|
||||||
|
"refreshlib": "file:../../RefreshLib"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,8 @@
|
|||||||
import { ConsulList } from '../model/ConsulModel'
|
import { ConsulList } from '../model/ConsulModel'
|
||||||
import { router } from '@kit.ArkUI'
|
import { router } from '@kit.ArkUI'
|
||||||
import { BasicConstant, ChatParam, preferenceStore } from '@itcast/basic';
|
import { BasicConstant, ChatParam, preferenceStore } from '@itcast/basic';
|
||||||
import { ChatKitClient } from '@nimkit/chatkit';
|
import { ChatKitClient, LocalConversationRepo } from '@nimkit/chatkit';
|
||||||
|
import { HMRouterMgr } from '@hadss/hmrouter';
|
||||||
|
|
||||||
|
|
||||||
@Preview
|
@Preview
|
||||||
@ -11,10 +12,11 @@ export struct ItemCompPublic {
|
|||||||
@Prop item:ConsulList;
|
@Prop item:ConsulList;
|
||||||
@State isHistory:boolean = false;//是否是我已回答
|
@State isHistory:boolean = false;//是否是我已回答
|
||||||
@State status:string=''
|
@State status:string=''
|
||||||
|
@State unreadCount:number=0
|
||||||
aboutToAppear(): void {
|
aboutToAppear(): void {
|
||||||
|
this.getUnread()
|
||||||
}
|
}
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
build() {
|
build() {
|
||||||
|
|
||||||
Column() {
|
Column() {
|
||||||
@ -26,13 +28,16 @@ export struct ItemCompPublic {
|
|||||||
Text(this.item.createDate ?
|
Text(this.item.createDate ?
|
||||||
this.item.createDate.length > 16 ? this.item.createDate.substring(1, 16) : 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 })
|
.fontSize(15).fontColor($r('app.color.top_title')).padding({ left: 5 })
|
||||||
Text('')
|
Text(this.unreadCount>100?'...':this.unreadCount+'')
|
||||||
.width(11)
|
.width(18)
|
||||||
.height(11)
|
.height(18)
|
||||||
|
.fontSize(11)
|
||||||
|
.textAlign(TextAlign.Center)
|
||||||
|
.fontColor(Color.White)
|
||||||
.backgroundColor('#ffff3e3e')
|
.backgroundColor('#ffff3e3e')
|
||||||
.borderRadius(20)
|
.borderRadius(20)
|
||||||
.margin({ top: -20 })
|
.margin({ top: -20 })
|
||||||
.visibility(this.isHistory ? Visibility.Visible : Visibility.None)
|
.visibility(this.unreadCount>0&&this.item.state!=3 ? Visibility.Visible : Visibility.None)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,10 +61,13 @@ export struct ItemCompPublic {
|
|||||||
.borderRadius(17)
|
.borderRadius(17)
|
||||||
.textAlign(TextAlign.Center)
|
.textAlign(TextAlign.Center)
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
router.pushUrl({
|
HMRouterMgr.push({ pageUrl: 'ConsultationDetailPage' , param: {
|
||||||
url: 'pages/Netease/ConsultationDetailPage',
|
uuid: this.item.uuid, isHistory: this.isHistory+''
|
||||||
params: { uuid: this.item.uuid, isHistory: this.isHistory + '' }
|
} })
|
||||||
});
|
// router.pushUrl({
|
||||||
|
// url: 'pages/Netease/ConsultationDetailPage',
|
||||||
|
// params: { uuid: this.item.uuid, isHistory: this.isHistory + '' ,patientUuid:this.item.patientUuid}
|
||||||
|
// });
|
||||||
})
|
})
|
||||||
Text(this.item.diseaseName.includes("甲、乙、丙、丁") ? '肝炎' : this.item.diseaseName)
|
Text(this.item.diseaseName.includes("甲、乙、丙、丁") ? '肝炎' : this.item.diseaseName)
|
||||||
.fontSize(11)
|
.fontSize(11)
|
||||||
@ -83,22 +91,31 @@ export struct ItemCompPublic {
|
|||||||
{
|
{
|
||||||
preferenceStore.setItemString('gdxz_consult_uuid', this.item.uuid)
|
preferenceStore.setItemString('gdxz_consult_uuid', this.item.uuid)
|
||||||
preferenceStore.setItemString('gdxz_sessionType', BasicConstant.consult)
|
preferenceStore.setItemString('gdxz_sessionType', BasicConstant.consult)
|
||||||
this.pathStack.pushPath({
|
HMRouterMgr.push({ pageUrl: 'ChatP2PPage' , param: {
|
||||||
name: "ChatP2PPage",
|
conversationId: ChatKitClient.nim.conversationIdUtil.p2pConversationId(this.item.patientUuid.toString()
|
||||||
param: {
|
.toLowerCase()),
|
||||||
conversationId: ChatKitClient.nim.conversationIdUtil.p2pConversationId(this.item.patientUuid.toString()
|
name: this.item.realName,
|
||||||
.toLowerCase()),
|
chat_state:this.item.state+''
|
||||||
name: this.item.realName,
|
} as ChatParam})
|
||||||
chat_state:this.item.state+''
|
// this.pathStack.pushPath({
|
||||||
} as ChatParam
|
// 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
|
else
|
||||||
{
|
{
|
||||||
router.pushUrl({
|
HMRouterMgr.push({ pageUrl: 'ConsultationDetailPage' , param: {
|
||||||
url: 'pages/Netease/ConsultationDetailPage',
|
uuid: this.item.uuid, isHistory: this.isHistory+''
|
||||||
params: { uuid: this.item.uuid,isHistory:this.isHistory+''}
|
} })
|
||||||
});
|
// router.pushUrl({
|
||||||
|
// url: 'pages/Netease/ConsultationDetailPage',
|
||||||
|
// params: { uuid: this.item.uuid,isHistory:this.isHistory+''}
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -108,5 +125,11 @@ export struct ItemCompPublic {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getUnread()
|
||||||
|
{
|
||||||
|
|
||||||
|
this.unreadCount = LocalConversationRepo.getTotalUnreadCount() ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
122
features/netease/src/main/ets/components/ItemCompTeach.ets
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
import { HMRouterMgr } from '@hadss/hmrouter';
|
||||||
|
import { BasicConstant, TimestampUtil } from '@itcast/basic';
|
||||||
|
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
|
||||||
|
import { LengthMetrics, router } from '@kit.ArkUI'
|
||||||
|
import { ChatKitClient } from '@nimkit/chatkit';
|
||||||
|
import { customAttachment } from '@nimkit/chatkit_ui/src/main/ets/view/MessageComponentBuilder';
|
||||||
|
import { StringIsEmpty } from '@nimkit/common';
|
||||||
|
import { PatientTBean } from '../model/TeachModel';
|
||||||
|
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Component
|
||||||
|
export struct ItemCompTeach {
|
||||||
|
@Prop item:PatientTBean;
|
||||||
|
|
||||||
|
aboutToAppear(): void {
|
||||||
|
this.initDialog()
|
||||||
|
}
|
||||||
|
private dialog!:CustomDialogController;
|
||||||
|
@State inputPlaceholder:string=''
|
||||||
|
initDialog() {
|
||||||
|
this.dialog = new CustomDialogController({
|
||||||
|
builder:PerfactInputSheet({
|
||||||
|
controller:this.dialog,
|
||||||
|
inputTitle:'是否确定发送此患教科普',
|
||||||
|
inputPlaceholder:this.inputPlaceholder,
|
||||||
|
style:'2',
|
||||||
|
okText:'发送',
|
||||||
|
okColor:$r('app.color.top_title'),
|
||||||
|
inputCallBack:(input: string,title:string)=>{
|
||||||
|
let img=StringIsEmpty(this.item.imgPath)?"http://doc.igandan.com/app/html/img/2016/20160714132557.png":BasicConstant.urlHtml+this.item.imgPath
|
||||||
|
const jsonData:customAttachment = {
|
||||||
|
gdxz_title: this.item.topic,
|
||||||
|
gdxz_url:BasicConstant.urlHtml+this.item.path,
|
||||||
|
gdxz_content:this.item.summary,
|
||||||
|
gdxz_id: this.item.uuid,
|
||||||
|
gdxz_img:img ,
|
||||||
|
gdxz_type: BasicConstant.Teach,
|
||||||
|
gdxz_ext_data: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HMRouterMgr.pop({param:JSON.stringify(jsonData)})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
keyboardAvoidDistance: LengthMetrics.vp(0), // 设置弹窗底部与键盘顶部间距(单位:vp)
|
||||||
|
alignment: DialogAlignment.Center,
|
||||||
|
customStyle: true,
|
||||||
|
autoCancel: false,
|
||||||
|
backgroundColor: ('rgba(0,0,0,0.5)'),
|
||||||
|
height: '100%'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
build() {
|
||||||
|
|
||||||
|
Column()
|
||||||
|
{ Row()
|
||||||
|
{
|
||||||
|
Image(BasicConstant.urlHtml+this.item.imgPath).width(114).height(76).alt($r('app.media.home_scroll_default1'))
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Text(this.item.topic).fontColor($r('app.color.common_gray_01')).fontSize(16) .textOverflow({ overflow: TextOverflow.Ellipsis }).height(40)
|
||||||
|
.ellipsisMode(EllipsisMode.END).maxLines(2) .textAlign(TextAlign.Start).align(Alignment.TopStart)
|
||||||
|
.width('100%')
|
||||||
|
Row()
|
||||||
|
{
|
||||||
|
Row() {
|
||||||
|
Text('今日')
|
||||||
|
.borderRadius(30)
|
||||||
|
.fontColor(Color.White)
|
||||||
|
.backgroundColor('#f24d57')
|
||||||
|
.fontSize(11)
|
||||||
|
.padding({ left: 5, right: 5,top:2,bottom:2 })
|
||||||
|
.visibility(TimestampUtil.isToday(this.item.modifyDate) ? Visibility.Visible : Visibility.None)
|
||||||
|
Text(this.item.modifyDate.length > 10 ? this.item.modifyDate.substring(5, 10) : this.item.modifyDate)
|
||||||
|
.fontColor($r('app.color.common_gray_03'))
|
||||||
|
.fontSize(12)
|
||||||
|
|
||||||
|
.visibility(!TimestampUtil.isToday(this.item.modifyDate) ? Visibility.Visible : Visibility.None)
|
||||||
|
}.width(80).align(Alignment.Start)
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.read_commient')).width(10).height(10)
|
||||||
|
Text(this.item.readnum > 100000 ? this.item.readnum * 1.000 / 10000.00 + '万' : this.item.readnum + '')
|
||||||
|
.fontColor($r('app.color.common_gray_03')).padding({left:3})
|
||||||
|
.fontSize(12)
|
||||||
|
}.width(80).align(Alignment.Start)
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.argee_commient')).width(10).height(10)
|
||||||
|
Text(this.item.agreenum > 100000 ? this.item.agreenum * 1.000 / 10000.00 + '万' : this.item.agreenum + '')
|
||||||
|
.fontColor($r('app.color.common_gray_03')).padding({left:3})
|
||||||
|
.fontSize(12)
|
||||||
|
}.width(80).align(Alignment.Start)
|
||||||
|
}
|
||||||
|
.margin({top:10})
|
||||||
|
.width('100%')
|
||||||
|
}.padding({left:10})
|
||||||
|
.layoutWeight(1)
|
||||||
|
|
||||||
|
}.alignSelf(ItemAlign.Start)
|
||||||
|
|
||||||
|
.width('100%')
|
||||||
|
.padding(10)
|
||||||
|
.onClick(() => {
|
||||||
|
this.inputPlaceholder=this.item.topic
|
||||||
|
this.dialog.open()
|
||||||
|
})
|
||||||
|
Text().backgroundColor($r('app.color.efefef')).width('100%').height(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
114
features/netease/src/main/ets/components/ItemCompTeachVideo.ets
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
import { HMRouterMgr } from '@hadss/hmrouter';
|
||||||
|
import { BasicConstant, TimestampUtil } from '@itcast/basic';
|
||||||
|
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
|
||||||
|
import { LengthMetrics, router } from '@kit.ArkUI'
|
||||||
|
import { ChatKitClient } from '@nimkit/chatkit';
|
||||||
|
import { customAttachment } from '@nimkit/chatkit_ui/src/main/ets/view/MessageComponentBuilder';
|
||||||
|
import { StringIsEmpty } from '@nimkit/common';
|
||||||
|
import { PatientVBean } from '../model/TeachVideoModel';
|
||||||
|
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Component
|
||||||
|
export struct ItemCompTeachVideo {
|
||||||
|
@Prop item:PatientVBean;
|
||||||
|
|
||||||
|
aboutToAppear(): void {
|
||||||
|
this.initDialog()
|
||||||
|
}
|
||||||
|
private dialog!:CustomDialogController;
|
||||||
|
@State inputPlaceholder:string=''
|
||||||
|
initDialog() {
|
||||||
|
this.dialog = new CustomDialogController({
|
||||||
|
builder:PerfactInputSheet({
|
||||||
|
controller:this.dialog,
|
||||||
|
inputTitle:'是否确定发送此患教科普',
|
||||||
|
inputPlaceholder:this.inputPlaceholder,
|
||||||
|
style:'2',
|
||||||
|
okText:'发送',
|
||||||
|
okColor:$r('app.color.top_title'),
|
||||||
|
inputCallBack:(input: string,title:string)=>{
|
||||||
|
let img=StringIsEmpty(this.item.imgpath)?"http://doc.igandan.com/app/html/img/2016/20160714132557.png":BasicConstant.urlHtml+this.item.imgpath
|
||||||
|
const jsonData:customAttachment = {
|
||||||
|
|
||||||
|
gdxz_title: this.item.name,
|
||||||
|
gdxz_url:BasicConstant.urlHtml+this.item.path,
|
||||||
|
gdxz_content:'肝胆相照®肝胆病在线公共服务平台',
|
||||||
|
gdxz_id: this.item.uuid,
|
||||||
|
gdxz_img:img,
|
||||||
|
gdxz_type: BasicConstant.VideoTeach,
|
||||||
|
gdxz_ext_data: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HMRouterMgr.pop({param:JSON.stringify(jsonData)})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
keyboardAvoidDistance: LengthMetrics.vp(0), // 设置弹窗底部与键盘顶部间距(单位:vp)
|
||||||
|
alignment: DialogAlignment.Center,
|
||||||
|
customStyle: true,
|
||||||
|
autoCancel: false,
|
||||||
|
backgroundColor: ('rgba(0,0,0,0.5)'),
|
||||||
|
height: '100%'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
build() {
|
||||||
|
|
||||||
|
Column()
|
||||||
|
{ Row()
|
||||||
|
{
|
||||||
|
Image(BasicConstant.urlHtml+this.item.imgpath).width(114).height(76).alt($r('app.media.home_scroll_default1')).borderRadius(4)
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Text(this.item.name).fontColor($r('app.color.common_gray_01')).fontSize(16) .textOverflow({ overflow: TextOverflow.Ellipsis }).height(40)
|
||||||
|
.ellipsisMode(EllipsisMode.END).maxLines(2) .textAlign(TextAlign.Start).align(Alignment.TopStart)
|
||||||
|
.width('100%')
|
||||||
|
Text(this.item.public_name)
|
||||||
|
.fontColor($r('app.color.common_gray_03'))
|
||||||
|
.fontSize(14)
|
||||||
|
.width('100%').textAlign(TextAlign.Start)
|
||||||
|
Row()
|
||||||
|
{
|
||||||
|
Row() {
|
||||||
|
|
||||||
|
Text(this.item.create_date.split(" ")[0])
|
||||||
|
.fontColor($r('app.color.common_gray_03'))
|
||||||
|
.fontSize(12)
|
||||||
|
}.width(100).align(Alignment.Start)
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.read_commient')).width(10).height(10)
|
||||||
|
Text(this.item.readnum > 100000 ? this.item.readnum * 1.000 / 10000.00 + '万' : this.item.readnum + '')
|
||||||
|
.fontColor($r('app.color.common_gray_03')).padding({left:3})
|
||||||
|
.fontSize(12)
|
||||||
|
}.width(80).align(Alignment.Start)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
.margin({top:10})
|
||||||
|
.width('100%')
|
||||||
|
}.padding({left:10})
|
||||||
|
.layoutWeight(1)
|
||||||
|
|
||||||
|
}.alignSelf(ItemAlign.Start)
|
||||||
|
|
||||||
|
.width('100%')
|
||||||
|
.padding(10)
|
||||||
|
.onClick(() => {
|
||||||
|
this.inputPlaceholder=this.item.name
|
||||||
|
this.dialog.open()
|
||||||
|
})
|
||||||
|
Text().backgroundColor($r('app.color.efefef')).width('100%').height(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ import HashMap from '@ohos.util.HashMap';
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
export struct ListCompPublic {
|
export struct ListCompPublic {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
|
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
|
||||||
@Prop
|
@Prop
|
||||||
@Watch('onUpdate')
|
@Watch('onUpdate')
|
||||||
@ -207,7 +207,7 @@ export struct ListCompPublic {
|
|||||||
{
|
{
|
||||||
ForEach(this.list, (item: ConsulList) => {
|
ForEach(this.list, (item: ConsulList) => {
|
||||||
ListItem() {
|
ListItem() {
|
||||||
ItemCompPublic({ item,isHistory:this.isHistory,pathStack: this.pathStack })
|
ItemCompPublic({ item,isHistory:this.isHistory })
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
features/netease/src/main/ets/model/Groups.ets
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { PatientsData } from '@itcast/basic';
|
||||||
|
|
||||||
|
export class Groups {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理后的数据分组标题
|
||||||
|
*/
|
||||||
|
title: string = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RegionData数组
|
||||||
|
*/
|
||||||
|
regionDataList: Array<PatientsData> = [];
|
||||||
|
}
|
||||||
31
features/netease/src/main/ets/model/TeachModel.ets
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
export interface TeachModel {
|
||||||
|
code:string;
|
||||||
|
data:PatientTBean[];
|
||||||
|
message:string;
|
||||||
|
totalPage:number
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export interface PatientTBean{
|
||||||
|
|
||||||
|
expertName:string;
|
||||||
|
imgPath:string;
|
||||||
|
topic:string;
|
||||||
|
publisherUuid:string;
|
||||||
|
recommendedUuid:string;
|
||||||
|
isOriginal:string;
|
||||||
|
isThrough:string;
|
||||||
|
filePath:number;
|
||||||
|
uuid:string;
|
||||||
|
agreenum:number;
|
||||||
|
readnum:number;
|
||||||
|
submitDate:string;
|
||||||
|
modifyDate:string;
|
||||||
|
summary:string;
|
||||||
|
type:string;
|
||||||
|
path:string;
|
||||||
|
tags:string;
|
||||||
|
content:string;
|
||||||
|
}
|
||||||
|
|
||||||
31
features/netease/src/main/ets/model/TeachVideoModel.ets
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
export interface TeachVideoModel {
|
||||||
|
code:string;
|
||||||
|
data:TeachVideo;
|
||||||
|
message:string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface TeachVideo {
|
||||||
|
totalPage:number,
|
||||||
|
list:PatientVBean[];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PatientVBean{
|
||||||
|
|
||||||
|
type_uuid:string;
|
||||||
|
imgpath:string;
|
||||||
|
public_name:string;
|
||||||
|
sort:string;
|
||||||
|
uuid:string;
|
||||||
|
readnum:number;
|
||||||
|
create_date:string;
|
||||||
|
name:string;
|
||||||
|
status:string;
|
||||||
|
path:string;
|
||||||
|
tags:string;
|
||||||
|
note:string;
|
||||||
|
video_type_name:string;
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
export interface patientVideoTypeModel {
|
||||||
|
code:string;
|
||||||
|
data:VideoTypeBean[];
|
||||||
|
message:string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export interface VideoTypeBean{
|
||||||
|
|
||||||
|
|
||||||
|
uuid:string;
|
||||||
|
sort:number;
|
||||||
|
status:number;
|
||||||
|
note:string;
|
||||||
|
name:string;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,25 +1,36 @@
|
|||||||
|
|
||||||
import { authStore, BaseBean, BasicConstant, hdHttp, HdLoadingDialog, HdNav, HdResponse,
|
import { authStore, BaseBean, BasicConstant,
|
||||||
|
ChatParam,
|
||||||
|
hdHttp, HdLoadingDialog, HdNav, HdResponse,
|
||||||
PhotoGrids,
|
PhotoGrids,
|
||||||
|
preferenceStore,
|
||||||
ViewImageInfo} from '@itcast/basic'
|
ViewImageInfo} from '@itcast/basic'
|
||||||
import { HashMap } from '@kit.ArkTS';
|
import { HashMap } from '@kit.ArkTS';
|
||||||
import { ConsultDetail, ConsultPhoto } from '../model/ConsulModel';
|
import { ConsultDetail, ConsultPhoto } from '../model/ConsulModel';
|
||||||
import { BusinessError } from '@kit.BasicServicesKit';
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
import { promptAction, router } from '@kit.ArkUI';
|
import { promptAction, router } from '@kit.ArkUI';
|
||||||
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
|
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
|
||||||
|
import { ChatKitClient } from '@nimkit/chatkit';
|
||||||
|
import { customAttachment } from '@nimkit/chatkit_ui/src/main/ets/view/MessageComponentBuilder';
|
||||||
|
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
|
||||||
|
|
||||||
|
@HMRouter({
|
||||||
|
pageUrl: 'ConsultationDetailPage'
|
||||||
|
})
|
||||||
@Component
|
@Component
|
||||||
export struct ConsultationDetailComp {
|
export struct ConsultationDetailComp {
|
||||||
@State patientName: string='' ;
|
@State patientName: string='' ;
|
||||||
hashMap: HashMap<string, string> = new HashMap();
|
hashMap: HashMap<string, string> = new HashMap();
|
||||||
@State params:Record<string, string> = router.getParams() as Record<string, string>;
|
// @State params:Record<string, string> = router.getParams() as Record<string, string>;
|
||||||
|
@State params:Record<string, string>= HMRouterMgr.getCurrentParam() as Record<string, string>;
|
||||||
@State state: number=1 ;
|
@State state: number=1 ;
|
||||||
@State createDate: string='' ;
|
@State createDate: string='' ;
|
||||||
@State content: string='' ;
|
@State content: string='' ;
|
||||||
@State diseaseName: string='' ;
|
@State diseaseName: string='' ;
|
||||||
@State imgList:ConsultPhoto[]=[]
|
@State imgList:ConsultPhoto[]=[]
|
||||||
|
@State chat_state:string=''
|
||||||
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
|
@State patientUuid:string=''
|
||||||
dialog: CustomDialogController = new CustomDialogController({
|
dialog: CustomDialogController = new CustomDialogController({
|
||||||
builder: HdLoadingDialog({ message: '加载中...' }),
|
builder: HdLoadingDialog({ message: '加载中...' }),
|
||||||
customStyle: true,
|
customStyle: true,
|
||||||
@ -51,6 +62,7 @@ export struct ConsultationDetailComp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
aboutToAppear() {
|
aboutToAppear() {
|
||||||
|
|
||||||
this.initDialog()
|
this.initDialog()
|
||||||
this.initData()
|
this.initData()
|
||||||
}
|
}
|
||||||
@ -71,7 +83,7 @@ export struct ConsultationDetailComp {
|
|||||||
this.content=json.data.detail.content
|
this.content=json.data.detail.content
|
||||||
this.diseaseName=json.data.detail.diseaseName
|
this.diseaseName=json.data.detail.diseaseName
|
||||||
this.imgList = [...json.data.imgList]
|
this.imgList = [...json.data.imgList]
|
||||||
|
this.patientUuid=json.data.detail.patientUuid
|
||||||
|
|
||||||
}).catch((err: BusinessError) => {
|
}).catch((err: BusinessError) => {
|
||||||
this.dialog.close()
|
this.dialog.close()
|
||||||
@ -113,6 +125,39 @@ export struct ConsultationDetailComp {
|
|||||||
{
|
{
|
||||||
promptAction.showToast({ message: '抢答成功' })
|
promptAction.showToast({ message: '抢答成功' })
|
||||||
this.addBonusPoints()
|
this.addBonusPoints()
|
||||||
|
preferenceStore.setItemString('gdxz_consult_uuid',this.params.uuid)
|
||||||
|
preferenceStore.setItemString('gdxz_sessionType', BasicConstant.consult)
|
||||||
|
const jsonData:customAttachment = {
|
||||||
|
gdxz_title: this.content,
|
||||||
|
gdxz_url: '',
|
||||||
|
gdxz_content: '',
|
||||||
|
gdxz_id: this.params.uuid,
|
||||||
|
gdxz_img: '',
|
||||||
|
gdxz_type: BasicConstant.CouTeach,
|
||||||
|
gdxz_ext_data: ''
|
||||||
|
}
|
||||||
|
HMRouterMgr.push({ pageUrl: 'ChatP2PPage' , param: {
|
||||||
|
conversationId: ChatKitClient.nim.conversationIdUtil.p2pConversationId(this.patientUuid
|
||||||
|
.toLowerCase()),
|
||||||
|
name: this.patientName,
|
||||||
|
chat_state:'',
|
||||||
|
hasMessage:'true',
|
||||||
|
messageType:BasicConstant.CouTeach,
|
||||||
|
rawAttach:JSON.stringify(jsonData)
|
||||||
|
} as ChatParam})
|
||||||
|
// this.pathStack.pushPath({
|
||||||
|
// name: "ChatP2PPage",
|
||||||
|
// param: {
|
||||||
|
// conversationId: ChatKitClient.nim.conversationIdUtil.p2pConversationId(this.params.patientUuid
|
||||||
|
// .toLowerCase()),
|
||||||
|
// name: this.patientName,
|
||||||
|
// chat_state:'',
|
||||||
|
// hasMessage:'true',
|
||||||
|
// gdxz_sessionType:BasicConstant.consult,
|
||||||
|
// rawAttach:JSON.stringify(jsonData)
|
||||||
|
// } as ChatParam
|
||||||
|
// })
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -125,6 +170,7 @@ export struct ConsultationDetailComp {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
addBonusPoints() {
|
addBonusPoints() {
|
||||||
const hashMap: HashMap<string, string> = new HashMap();
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
|
||||||
@ -142,7 +188,9 @@ export struct ConsultationDetailComp {
|
|||||||
build() {
|
build() {
|
||||||
|
|
||||||
Column() {
|
Column() {
|
||||||
HdNav({ title: '咨询详情', showRightIcon: false, showLeftIcon: true})
|
HdNav({ title: '咨询详情', showRightIcon: false, showLeftIcon: true,isLeftAction:true,leftItemAction: () => {
|
||||||
|
HMRouterMgr.pop()
|
||||||
|
}})
|
||||||
Text(this.state==0?$r('app.string.cancellation'):this.patientName).fontSize(19).fontColor($r('app.color.top_title')).width('100%') .padding(10)
|
Text(this.state==0?$r('app.string.cancellation'):this.patientName).fontSize(19).fontColor($r('app.color.top_title')).width('100%') .padding(10)
|
||||||
Row()
|
Row()
|
||||||
{
|
{
|
||||||
@ -180,7 +228,7 @@ export struct ConsultationDetailComp {
|
|||||||
.fontColor($r('app.color.main_color'))
|
.fontColor($r('app.color.main_color'))
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
this.countConsult()
|
this.countConsult()
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.visibility(this.params.isHistory=='false'?Visibility.Visible:Visibility.None)
|
.visibility(this.params.isHistory=='false'?Visibility.Visible:Visibility.None)
|
||||||
@ -191,12 +239,7 @@ export struct ConsultationDetailComp {
|
|||||||
.width('100%')
|
.width('100%')
|
||||||
.width('100%')
|
.width('100%')
|
||||||
|
|
||||||
.onClick(() => {
|
|
||||||
// router.pushUrl({
|
|
||||||
// url: 'pages/Netease/ConsultationDetailPage',
|
|
||||||
// params: { uuid: this.item.uuid}
|
|
||||||
// });
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import { V2NIMFriendAddApplication } from '@nimsdk/base';
|
|||||||
@ComponentV2
|
@ComponentV2
|
||||||
export struct MessageComp {
|
export struct MessageComp {
|
||||||
|
|
||||||
@Param pathStack: NavPathStack = new NavPathStack()
|
// @Param pathStack: NavPathStack = new NavPathStack()
|
||||||
@Param onUreadMessageChange?: (unreadCount?: number) => void = undefined
|
@Param onUreadMessageChange?: (unreadCount?: number) => void = undefined
|
||||||
|
|
||||||
loadUnreadApplication = async () => {
|
loadUnreadApplication = async () => {
|
||||||
@ -70,7 +70,7 @@ export struct MessageComp {
|
|||||||
// })
|
// })
|
||||||
}})
|
}})
|
||||||
LocalConversationPage({
|
LocalConversationPage({
|
||||||
pathStack: this.pathStack,
|
|
||||||
onUreadMessageChange: this.onUreadMessageChange,
|
onUreadMessageChange: this.onUreadMessageChange,
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
440
features/netease/src/main/ets/view/PatientListComp.ets
Normal file
@ -0,0 +1,440 @@
|
|||||||
|
import { authStore, BasicConstant, hdHttp, HdLoadingDialog,HdNav, HdResponse, patientDbManager,
|
||||||
|
PatientListModel,
|
||||||
|
PatientsData} from '@itcast/basic'
|
||||||
|
import { Groups } from '../model/Groups';
|
||||||
|
import { display } from '@kit.ArkUI';
|
||||||
|
import { StringIsEmpty } from '@nimkit/common';
|
||||||
|
import I18n from '@ohos.i18n';
|
||||||
|
import Intl from '@ohos.intl';
|
||||||
|
let collator = new Intl.Collator(I18n.System.getSystemLocale(), {
|
||||||
|
usage: 'sort',
|
||||||
|
collation: 'pinyin',
|
||||||
|
caseFirst: 'lower'
|
||||||
|
})
|
||||||
|
@Component
|
||||||
|
export struct PatientListComp {
|
||||||
|
|
||||||
|
private scroller: Scroller = new Scroller()
|
||||||
|
@State regionInfo: Array<PatientsData> = [];
|
||||||
|
@State regionDataGroupsList: Array<Groups> = [];
|
||||||
|
private indexList: Array<string> = []
|
||||||
|
private normalIndexValue: string[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
|
||||||
|
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#']
|
||||||
|
|
||||||
|
private indexUtil = I18n.getInstance(I18n.System.getSystemLocale());
|
||||||
|
|
||||||
|
@State alphabetSelected: number = 0
|
||||||
|
dialog: CustomDialogController = new CustomDialogController({
|
||||||
|
builder: HdLoadingDialog({ message: '加载中...' }),
|
||||||
|
customStyle: true,
|
||||||
|
alignment: DialogAlignment.Center
|
||||||
|
})
|
||||||
|
|
||||||
|
aboutToAppear() {
|
||||||
|
this. PatientsData()
|
||||||
|
|
||||||
|
this.loadPatients()
|
||||||
|
}
|
||||||
|
|
||||||
|
PatientsData()
|
||||||
|
{
|
||||||
|
this.dialog.open()
|
||||||
|
hdHttp.post<string>(BasicConstant.urlExpert + 'patientListByGBK', {
|
||||||
|
expertUuid: authStore.getUser().uuid
|
||||||
|
} as updateExtraData).then(async (res: HdResponse<string>) => {
|
||||||
|
try {
|
||||||
|
let json: PatientListModel = JSON.parse(res + '') as PatientListModel;
|
||||||
|
console.log('服务器返回的患者数据:', json);
|
||||||
|
if(json.data!=null)
|
||||||
|
{
|
||||||
|
this.collationData(json.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} catch (parseError) {
|
||||||
|
console.error('解析服务器响应失败:', parseError);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async loadPatients() {
|
||||||
|
try {
|
||||||
|
await patientDbManager.patientsToFMDB();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('加载患者数据失败:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Builder
|
||||||
|
itemHead(text: string) {
|
||||||
|
ListItem() {
|
||||||
|
Row() {
|
||||||
|
Text(text)
|
||||||
|
.fontSize($r('sys.float.ohos_id_text_size_sub_title3'))
|
||||||
|
.fontWeight(FontWeight.Medium)
|
||||||
|
.fontFamily($r('sys.string.ohos_id_text_font_family_medium'))
|
||||||
|
.fontColor($r('sys.color.ohos_id_color_text_secondary'))
|
||||||
|
}
|
||||||
|
.alignItems(VerticalAlign.Center)
|
||||||
|
.justifyContent(FlexAlign.Start)
|
||||||
|
.backgroundColor($r('sys.color.ohos_id_color_panel_bg'))
|
||||||
|
// .enabled(this.selectState)
|
||||||
|
.height(40)
|
||||||
|
.width('100%')
|
||||||
|
.padding({ left: 15,})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
|
||||||
|
Column() {
|
||||||
|
HdNav({ title: '患者消息', showRightIcon: true, showLeftIcon: true,showRightText:false,rightIcon:$r('app.media.selected_hospital_ws')})
|
||||||
|
Stack({ alignContent: Alignment.TopEnd }) {
|
||||||
|
Column() {
|
||||||
|
List({ scroller: this.scroller, space: 0, initialIndex: 0 }) {
|
||||||
|
ListItem() {
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.new_patient'))
|
||||||
|
.width(50)
|
||||||
|
.height(50)
|
||||||
|
.margin({ left:10 })
|
||||||
|
Row()
|
||||||
|
{
|
||||||
|
Text('新的患者')
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor($r('app.color.common_gray_01'))
|
||||||
|
.textAlign(TextAlign.Start)
|
||||||
|
.padding({left:10,right:10})
|
||||||
|
.maxLines(1)
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
.ellipsisMode(EllipsisMode.END)
|
||||||
|
Text('(待审核'+'人)')
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor(Color.Red)
|
||||||
|
.layoutWeight(1)
|
||||||
|
.textAlign(TextAlign.Start)
|
||||||
|
.padding({left:5})
|
||||||
|
.maxLines(1)
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
.ellipsisMode(EllipsisMode.END)
|
||||||
|
|
||||||
|
}.layoutWeight(1)
|
||||||
|
.align(Alignment.Start)
|
||||||
|
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Image($r('app.media.arrow_right'))
|
||||||
|
.width(7)
|
||||||
|
.height(13)
|
||||||
|
.margin({ left:10 })
|
||||||
|
.alignSelf(ItemAlign.End)
|
||||||
|
|
||||||
|
}.align(Alignment.End).padding({right:30})
|
||||||
|
}
|
||||||
|
.alignItems(VerticalAlign.Center)
|
||||||
|
.padding({ top:10,bottom:10})
|
||||||
|
.width('100%')
|
||||||
|
Text().height(0.5).backgroundColor($r('sys.color.ohos_id_color_list_separator')).width('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.align(Alignment.Start)
|
||||||
|
.onClick(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
ListItem() {
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.patientgroup'))
|
||||||
|
.width(50)
|
||||||
|
.height(50)
|
||||||
|
.margin({ left:10 })
|
||||||
|
Row()
|
||||||
|
{
|
||||||
|
Text('患者分组')
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor($r('app.color.common_gray_01'))
|
||||||
|
.textAlign(TextAlign.Start)
|
||||||
|
.padding({left:10,right:10})
|
||||||
|
.maxLines(1)
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
.ellipsisMode(EllipsisMode.END)
|
||||||
|
Text('(随访'+'人)')
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor(Color.Red)
|
||||||
|
.layoutWeight(1)
|
||||||
|
.textAlign(TextAlign.Start)
|
||||||
|
.padding({left:5})
|
||||||
|
.maxLines(1)
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
.ellipsisMode(EllipsisMode.END)
|
||||||
|
|
||||||
|
}.layoutWeight(1)
|
||||||
|
.align(Alignment.Start)
|
||||||
|
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Image($r('app.media.arrow_right'))
|
||||||
|
.width(7)
|
||||||
|
.height(13)
|
||||||
|
.margin({ left:10 })
|
||||||
|
.alignSelf(ItemAlign.End)
|
||||||
|
|
||||||
|
}.align(Alignment.End).padding({right:30})
|
||||||
|
}
|
||||||
|
.alignItems(VerticalAlign.Center)
|
||||||
|
.padding({ top:10,bottom:10})
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.align(Alignment.Start)
|
||||||
|
.onClick(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
ForEach(this.regionDataGroupsList, (regionDataGroups: Groups, index) => {
|
||||||
|
|
||||||
|
ListItemGroup({ header: this.itemHead(regionDataGroups.title) }) {
|
||||||
|
ListItem() {
|
||||||
|
List() {
|
||||||
|
ForEach(regionDataGroups.regionDataList, (regionData: PatientsData, index?: number) => {
|
||||||
|
ListItem() {
|
||||||
|
Row() {
|
||||||
|
Image(BasicConstant.urlHtml+regionData.photo)
|
||||||
|
.alt($r('app.media.userPhoto_default'))
|
||||||
|
.width(50)
|
||||||
|
.height(50)
|
||||||
|
.margin({ left:10 })
|
||||||
|
.borderRadius(8)
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Text(regionData.realName)
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor($r('app.color.common_gray_01'))
|
||||||
|
.width('100%')
|
||||||
|
.textAlign(TextAlign.Start)
|
||||||
|
.padding({left:10,right:10})
|
||||||
|
.maxLines(1)
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
.ellipsisMode(EllipsisMode.END)
|
||||||
|
Text(regionData.diagnosis?regionData.diagnosis.includes("甲、乙、丙、丁") ? '肝炎' :regionData.diagnosis:'')
|
||||||
|
.fontSize(12)
|
||||||
|
.borderColor($r('app.color.top_title'))
|
||||||
|
.fontColor($r('app.color.top_title'))
|
||||||
|
.padding({left:8,right:8,top:3,bottom:3})
|
||||||
|
.borderRadius(17)
|
||||||
|
.borderWidth(1)
|
||||||
|
.textAlign(TextAlign.Center)
|
||||||
|
.margin({top:5,left:10})
|
||||||
|
.visibility(regionData.diagnosis?Visibility.Visible:Visibility.None)
|
||||||
|
.alignSelf(ItemAlign.Start)
|
||||||
|
|
||||||
|
}.layoutWeight(1)
|
||||||
|
.align(Alignment.Start)
|
||||||
|
|
||||||
|
Column()
|
||||||
|
{
|
||||||
|
Image($r('app.media.edit_patitent'))
|
||||||
|
.width(24)
|
||||||
|
.height(24)
|
||||||
|
.margin({ left:10 })
|
||||||
|
.alignSelf(ItemAlign.End)
|
||||||
|
|
||||||
|
Text(regionData.join_date ?"随访于"+ regionData.join_date.split(" ")[0] :'')
|
||||||
|
.fontSize(12)
|
||||||
|
.fontColor($r('app.color.666666'))
|
||||||
|
.margin({top:5})
|
||||||
|
.textAlign(TextAlign.Center)
|
||||||
|
.visibility(regionData.join_date?Visibility.Visible:Visibility.None)
|
||||||
|
|
||||||
|
}.align(Alignment.End).padding({right:30})
|
||||||
|
}
|
||||||
|
.alignItems(VerticalAlign.Center)
|
||||||
|
.padding({ top:10,bottom:10})
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
.width('100%')
|
||||||
|
.align(Alignment.Start)
|
||||||
|
.onClick(() => {
|
||||||
|
// // 暂不选择需要退出
|
||||||
|
// if (regionData.name === this.noSelect) {
|
||||||
|
// this.selectedRegion = '';
|
||||||
|
// // 页面返回
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// this.selectedRegion = regionData.name;
|
||||||
|
// this.selectState = false;
|
||||||
|
// if (this.pageLevel < 4) {
|
||||||
|
// this.pageLevel++;
|
||||||
|
// }
|
||||||
|
// let regionData1 = this.getData('data2');
|
||||||
|
// if (this.pageLevel > 1) {
|
||||||
|
// regionData1 = this.getData('data3');
|
||||||
|
// }
|
||||||
|
// if (regionData1.regionInfos.length === 0) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// if (this.pageLevel < 4) {
|
||||||
|
// this.collationData(regionData1, false);
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.divider({
|
||||||
|
strokeWidth: 0.5,
|
||||||
|
color: $r('sys.color.ohos_id_color_list_separator'),
|
||||||
|
startMargin: 0,
|
||||||
|
endMargin: 0
|
||||||
|
})
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.align(Alignment.Center)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
.sticky(StickyStyle.None)
|
||||||
|
.onScrollIndex((start: number, end: number) => {
|
||||||
|
let target = this.indexList[start]
|
||||||
|
let indexList = this.normalIndexValue;
|
||||||
|
let index = this.searchIndex(indexList, target)
|
||||||
|
this.alphabetSelected = index === -1 ? this.onSlideList(indexList, target) - 1 : index;
|
||||||
|
})
|
||||||
|
.layoutWeight(1)
|
||||||
|
.width('100%')
|
||||||
|
.scrollBar(BarState.Off)
|
||||||
|
// Text().height(56).width('100%')
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
|
||||||
|
Column() {
|
||||||
|
AlphabetIndexer({
|
||||||
|
arrayValue: this.normalIndexValue,
|
||||||
|
selected: 0
|
||||||
|
})
|
||||||
|
.usingPopup(true)
|
||||||
|
.selected(this.alphabetSelected)
|
||||||
|
.onSelect((index: number) => {
|
||||||
|
if (index === 0) {
|
||||||
|
this.scroller.scrollToIndex(0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let pos = 0
|
||||||
|
let useValue = this.normalIndexValue
|
||||||
|
let currentWord = useValue[index] // 在右侧索引上的位置
|
||||||
|
if (currentWord === '·') { // 在右侧索引上的位置 刚号是点,则需要找右侧索引上一个字母
|
||||||
|
|
||||||
|
let beforeWord = useValue[index - 1]; // 这个是右侧索引点的上一个字母
|
||||||
|
let afterWord = useValue[index + 1];
|
||||||
|
|
||||||
|
pos = this.onClickPointIndex(this.indexList, beforeWord, afterWord)
|
||||||
|
} else {
|
||||||
|
pos = this.searchIndex(this.indexList, currentWord)
|
||||||
|
}
|
||||||
|
if (pos === -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.scroller.scrollToIndex(pos);
|
||||||
|
})
|
||||||
|
.id('id_hwid_region_choose_alphabetIndexer')
|
||||||
|
.onAreaChange((oldValue: Area, newValue: Area) => {
|
||||||
|
// 获取屏幕对象
|
||||||
|
let displayObj: display.Display = display.getDefaultDisplaySync();
|
||||||
|
// 获取屏幕高度
|
||||||
|
let displayHeight: number = displayObj.height / displayObj.densityPixels;
|
||||||
|
})
|
||||||
|
.itemSize('20')
|
||||||
|
.font({ size: '20vp' })
|
||||||
|
.selectedFont({
|
||||||
|
size: '20vp', style: FontStyle.Normal,
|
||||||
|
weight: FontWeight.Bolder
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
.height('100%')
|
||||||
|
.backgroundColor(Color.Transparent)
|
||||||
|
}
|
||||||
|
.layoutWeight(1)
|
||||||
|
|
||||||
|
|
||||||
|
}.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
|
||||||
|
// .backgroundColor($r('app.color.white'))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private collationData(regionRequestData: PatientsData[]) {
|
||||||
|
|
||||||
|
|
||||||
|
this.regionInfo = regionRequestData.map((regionData: PatientsData) => {
|
||||||
|
if(StringIsEmpty(regionData.nickname))
|
||||||
|
{
|
||||||
|
|
||||||
|
regionData.nickname = regionData.realName ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return regionData;
|
||||||
|
}).sort((a, b) => collator.compare(a.nickname, b.nickname));
|
||||||
|
this.indexList = [];
|
||||||
|
this.regionDataGroupsList = [];
|
||||||
|
this.regionInfo.forEach((value: PatientsData) => {
|
||||||
|
let index = this.indexUtil.getIndex(value.nickname);
|
||||||
|
|
||||||
|
if (this.indexList.indexOf(index) === -1) {
|
||||||
|
let regionDataGroups: Groups = new Groups();
|
||||||
|
if(this.normalIndexValue.includes(index))
|
||||||
|
{
|
||||||
|
regionDataGroups.title = index;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regionDataGroups.title = '#';
|
||||||
|
}
|
||||||
|
|
||||||
|
this.indexList.push(index);
|
||||||
|
regionDataGroups.regionDataList.push(value);
|
||||||
|
this.regionDataGroupsList.push(regionDataGroups);
|
||||||
|
} else {
|
||||||
|
this.regionDataGroupsList[this.indexList.indexOf(index)].regionDataList.push(value);
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.regionDataGroupsList.sort((a, b) => {
|
||||||
|
return this.normalIndexValue.indexOf(a.title) - this.normalIndexValue.indexOf(b.title);
|
||||||
|
});
|
||||||
|
this.dialog.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private searchIndex(indexList: string[], target: string): number {
|
||||||
|
return indexList.indexOf(target);
|
||||||
|
}
|
||||||
|
private onSlideList(indexList: string[], target: string): number {
|
||||||
|
for (let i = 1; i < indexList.length; i++) {
|
||||||
|
if (indexList[i] > target && indexList[i] !== '·') {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
private onClickPointIndex(indexList: string[], beforeWord: string, afterWord: string): number {
|
||||||
|
for (let i = 1; i < indexList.length; i++) {
|
||||||
|
if (indexList[i] > beforeWord && indexList[i] < afterWord) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
interface updateExtraData {
|
||||||
|
expertUuid: string
|
||||||
|
}
|
||||||
@ -7,14 +7,14 @@ export struct QuictDoctorComp {
|
|||||||
@Watch('onChangeIndex')
|
@Watch('onChangeIndex')
|
||||||
activeIndex: number = 0
|
activeIndex: number = 0
|
||||||
@State type: number=0
|
@State type: number=0
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
onChangeIndex() {
|
onChangeIndex() {
|
||||||
}
|
}
|
||||||
build() {
|
build() {
|
||||||
|
|
||||||
Column() {
|
Column() {
|
||||||
|
|
||||||
TabBarTopComp({activeIndex:this.activeIndex,type:this.type,pathStack: this.pathStack});
|
TabBarTopComp({activeIndex:this.activeIndex,type:this.type});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
228
features/netease/src/main/ets/view/SearchComp.ets
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
import { BasicConstant, EmptyViewComp, hdHttp, HdLoadingDialog, HdNav, HdResponse, HdSearchNav } from '@itcast/basic'
|
||||||
|
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter'
|
||||||
|
import { PullToRefreshLayout, RefreshController } from 'refreshlib'
|
||||||
|
import { HashMap } from '@kit.ArkTS';
|
||||||
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
|
import { PatientTBean, TeachModel } from '../model/TeachModel';
|
||||||
|
import { promptAction } from '@kit.ArkUI';
|
||||||
|
import { ItemCompTeach } from '../components/ItemCompTeach';
|
||||||
|
import { PatientVBean, TeachVideoModel } from '../model/TeachVideoModel';
|
||||||
|
import { ItemCompTeachVideo } from '../components/ItemCompTeachVideo';
|
||||||
|
|
||||||
|
@HMRouter({ pageUrl: 'SearchComp' })
|
||||||
|
@Component
|
||||||
|
export struct SearchComp {
|
||||||
|
dialog: CustomDialogController = new CustomDialogController({
|
||||||
|
builder: HdLoadingDialog({ message: '加载中...' }),
|
||||||
|
customStyle: true,
|
||||||
|
alignment: DialogAlignment.Center
|
||||||
|
})
|
||||||
|
@State params:Record<string, string>= HMRouterMgr.getCurrentParam() as Record<string, string>;
|
||||||
|
@State pageNumber:number = 1;
|
||||||
|
@State totalPageNumer:number = 1;
|
||||||
|
@State data:PatientTBean[]=[];
|
||||||
|
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
|
||||||
|
@State datav:PatientVBean[]=[];
|
||||||
|
@State empty:string='暂无数据'
|
||||||
|
aboutToAppear() {
|
||||||
|
|
||||||
|
this.getApplyList();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
getApplyList() {
|
||||||
|
this.dialog.open()
|
||||||
|
if(this.params.type=='tuwen')
|
||||||
|
{
|
||||||
|
this.empty='暂无患教学堂'
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('page',this.pageNumber.toString());
|
||||||
|
hashMap.set("topic", this.inputText);
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.polularScienceArticleListInexpertNew,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
let json:TeachModel = JSON.parse(res+'') as TeachModel;
|
||||||
|
if(json.code == '1') {
|
||||||
|
if(this.pageNumber==1)
|
||||||
|
{
|
||||||
|
this.data=[]
|
||||||
|
if(json.data!=null)
|
||||||
|
{
|
||||||
|
this.data = json.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(this.pageNumber>1)
|
||||||
|
{
|
||||||
|
this.data.push(...json.data)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.totalPageNumer =json.totalPage;
|
||||||
|
if (this.data.length > 0) {
|
||||||
|
this.isEmptyViewVisible = false;
|
||||||
|
} else {
|
||||||
|
this.isEmptyViewVisible = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
promptAction.showToast({ message: json.message, duration: 1000 })
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else if(this.params.type=='video')
|
||||||
|
{
|
||||||
|
this.empty='暂无科普视频'
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('page',this.pageNumber.toString());
|
||||||
|
hashMap.set("sort", this.params.sort);
|
||||||
|
hashMap.set("name", this.inputText);
|
||||||
|
if(this.params.typeUuid!='')
|
||||||
|
{
|
||||||
|
hashMap.set("typeUuid", this.params.typeUuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.patientVideoByName,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
let json:TeachVideoModel = JSON.parse(res+'') as TeachVideoModel;
|
||||||
|
if(json.code == '1') {
|
||||||
|
if(this.pageNumber==1)
|
||||||
|
{
|
||||||
|
this.datav=[]
|
||||||
|
if(json.data!=null)
|
||||||
|
{
|
||||||
|
this.datav = json.data.list;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(this.pageNumber>1)
|
||||||
|
{
|
||||||
|
this.datav.push(...json.data.list)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.totalPageNumer =json.data.totalPage;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
promptAction.showToast({ message: json.message, duration: 1000 })
|
||||||
|
}
|
||||||
|
if (this.datav.length > 0) {
|
||||||
|
this.isEmptyViewVisible = false;
|
||||||
|
} else {
|
||||||
|
this.isEmptyViewVisible = true;
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public controller:RefreshController = new RefreshController();
|
||||||
|
scroller = new Scroller();
|
||||||
|
|
||||||
|
@State inputText:string=''
|
||||||
|
|
||||||
|
|
||||||
|
onRefresh()
|
||||||
|
{
|
||||||
|
this.pageNumber = 1;
|
||||||
|
this.getApplyList();
|
||||||
|
}
|
||||||
|
build() {
|
||||||
|
Column(){
|
||||||
|
|
||||||
|
HdSearchNav({showRightText:true,rightText:'搜索',rightTextColor:Color.White,isFocus:true,placeholder:'输入搜索内容',rightItemAction:(value: string)=>{
|
||||||
|
this.inputText = value;
|
||||||
|
this.onRefresh();
|
||||||
|
},isLeftAction:true,
|
||||||
|
leftItemAction:()=>{
|
||||||
|
HMRouterMgr.pop()
|
||||||
|
}})
|
||||||
|
|
||||||
|
Text().height(5).width('100%').backgroundColor($r('app.color.home_gray'))
|
||||||
|
if (this.isEmptyViewVisible){
|
||||||
|
EmptyViewComp({promptText:this.empty,isVisibility:this.isEmptyViewVisible}).layoutWeight(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PullToRefreshLayout({
|
||||||
|
scroller:this.scroller,
|
||||||
|
viewKey:"ListPage",
|
||||||
|
controller:this.controller,
|
||||||
|
contentView:()=>{
|
||||||
|
this.contentView()
|
||||||
|
},
|
||||||
|
|
||||||
|
onRefresh:()=>{
|
||||||
|
this.pageNumber = 1;
|
||||||
|
this.getApplyList();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.controller.refreshSuccess()
|
||||||
|
}, 1000)
|
||||||
|
},
|
||||||
|
onCanPullRefresh:()=>{
|
||||||
|
if (!this.scroller.currentOffset()) {
|
||||||
|
/*处理无数据,为空的情况*/
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
//如果列表到顶,返回true,表示可以下拉,返回false,表示无法下拉
|
||||||
|
return this.scroller.currentOffset().yOffset <= 0
|
||||||
|
},
|
||||||
|
onLoad:()=>{
|
||||||
|
this.pageNumber++;
|
||||||
|
this.getApplyList();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.controller.loadSuccess()
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
|
},
|
||||||
|
onCanPullLoad: () => {
|
||||||
|
if (this.pageNumber >= this.totalPageNumer) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).width('100%').layoutWeight(1).clip(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
contentView(){
|
||||||
|
List({ scroller: this.scroller }) {
|
||||||
|
if(this.params.type=='tuwen')
|
||||||
|
{
|
||||||
|
ForEach(this.data, (item: PatientTBean, index) => {
|
||||||
|
ListItem() {
|
||||||
|
ItemCompTeach({item:item})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else if(this.params.type=='video')
|
||||||
|
{
|
||||||
|
ForEach(this.datav, (item: PatientVBean, index) => {
|
||||||
|
ListItem() {
|
||||||
|
ItemCompTeachVideo({item:item})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
.edgeEffect(EdgeEffect.None)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -2,10 +2,11 @@ import { TabBarCompModel } from '../model/TabBarCompModel'
|
|||||||
import { TabBarItems } from '../components/TabBarItems'
|
import { TabBarItems } from '../components/TabBarItems'
|
||||||
import { BasicConstant } from '@itcast/basic'
|
import { BasicConstant } from '@itcast/basic'
|
||||||
import { MessageComp } from '../view/MessageComp'
|
import { MessageComp } from '../view/MessageComp'
|
||||||
|
import { PatientListComp } from './PatientListComp'
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
export struct TabBarComp {
|
export struct TabBarComp {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
@StorageProp('bottomHeight')
|
@StorageProp('bottomHeight')
|
||||||
bottomHeight: number = 0
|
bottomHeight: number = 0
|
||||||
@Link
|
@Link
|
||||||
@ -33,8 +34,9 @@ export struct TabBarComp {
|
|||||||
}) {
|
}) {
|
||||||
ForEach(TabBarItems, (item: TabBarCompModel, index: number) => {
|
ForEach(TabBarItems, (item: TabBarCompModel, index: number) => {
|
||||||
TabContent() {
|
TabContent() {
|
||||||
if (index === 0) MessageComp({ pathStack: this.pathStack })
|
// if (index === 0) MessageComp({ pathStack: this.pathStack })
|
||||||
// else if (index === 1) VideoGandan()
|
if (index === 0) MessageComp()
|
||||||
|
else if (index === 1) PatientListComp()
|
||||||
// else if (index === 2) MyHomePage()
|
// else if (index === 2) MyHomePage()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { ManyForOneComp } from '../view/ManyForOneComp'
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
export struct TabBarConsultationComp {
|
export struct TabBarConsultationComp {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
@StorageProp('bottomHeight')
|
@StorageProp('bottomHeight')
|
||||||
bottomHeight: number = 0
|
bottomHeight: number = 0
|
||||||
@Link activeIndex: number
|
@Link activeIndex: number
|
||||||
@ -42,7 +42,7 @@ export struct TabBarConsultationComp {
|
|||||||
TabContent() {
|
TabContent() {
|
||||||
if (index === 0)
|
if (index === 0)
|
||||||
{
|
{
|
||||||
QuictDoctorComp({pathStack: this.pathStack})
|
QuictDoctorComp()
|
||||||
}
|
}
|
||||||
else if(index === 1)
|
else if(index === 1)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { ListCompMany } from '../components/ListCompMany'
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
export struct TabBarTopComp {
|
export struct TabBarTopComp {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
@StorageProp('bottomHeight')
|
@StorageProp('bottomHeight')
|
||||||
bottomHeight: number = 0
|
bottomHeight: number = 0
|
||||||
@Link activeIndex: number
|
@Link activeIndex: number
|
||||||
@ -46,7 +46,7 @@ export struct TabBarTopComp {
|
|||||||
TabContent() {
|
TabContent() {
|
||||||
if (this.type==0)
|
if (this.type==0)
|
||||||
{
|
{
|
||||||
ListCompPublic({isHistory:this.isHistory,pathStack: this.pathStack})
|
ListCompPublic({isHistory:this.isHistory})
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(this.type==1)
|
else if(this.type==1)
|
||||||
|
|||||||
212
features/netease/src/main/ets/view/TuwenComp.ets
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
import { BasicConstant, EmptyViewComp, hdHttp, HdLoadingDialog, HdNav, HdResponse, HdSearchNav } from '@itcast/basic'
|
||||||
|
import { HMRouter, HMRouterMgr, HMRouterPathCallback, HMRouterPathInfo } from '@hadss/hmrouter'
|
||||||
|
import { PullToRefreshLayout, RefreshController } from 'refreshlib'
|
||||||
|
import { HashMap } from '@kit.ArkTS';
|
||||||
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
|
import { PatientTBean, TeachModel } from '../model/TeachModel';
|
||||||
|
import { promptAction } from '@kit.ArkUI';
|
||||||
|
import { ItemCompTeach } from '../components/ItemCompTeach';
|
||||||
|
import { StringIsEmpty } from '@nimkit/common';
|
||||||
|
|
||||||
|
@HMRouter({ pageUrl: 'TuwenCompPage' })
|
||||||
|
@Component
|
||||||
|
export struct TuwenComp {
|
||||||
|
dialog: CustomDialogController = new CustomDialogController({
|
||||||
|
builder: HdLoadingDialog({ message: '加载中...' }),
|
||||||
|
customStyle: true,
|
||||||
|
alignment: DialogAlignment.Center
|
||||||
|
})
|
||||||
|
@State pageNumber:number = 1;
|
||||||
|
@State totalPageNumer:number = 1;
|
||||||
|
@State data:PatientTBean[]=[];
|
||||||
|
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
|
||||||
|
aboutToAppear() {
|
||||||
|
this.getApplyList();
|
||||||
|
}
|
||||||
|
getApplyList() {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('page',this.pageNumber.toString());
|
||||||
|
hashMap.set("type", this.sort);
|
||||||
|
hashMap.set("keywords", this.inputText);
|
||||||
|
this.dialog.open()
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.polularScienceArticleListByKeywordsNew,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
let json:TeachModel = JSON.parse(res+'') as TeachModel;
|
||||||
|
if(json.code == '1') {
|
||||||
|
if(this.pageNumber==1)
|
||||||
|
{
|
||||||
|
this.data=[]
|
||||||
|
if(json.data!=null)
|
||||||
|
{
|
||||||
|
this.data = json.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(this.pageNumber>1)
|
||||||
|
{
|
||||||
|
this.data.push(...json.data)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.totalPageNumer =json.totalPage;
|
||||||
|
if (this.data.length > 0) {
|
||||||
|
this.isEmptyViewVisible = false;
|
||||||
|
} else {
|
||||||
|
this.isEmptyViewVisible = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
promptAction.showToast({ message: json.message, duration: 1000 })
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
public controller:RefreshController = new RefreshController();
|
||||||
|
scroller = new Scroller();
|
||||||
|
@State Sorts:string='最新'
|
||||||
|
@State Imgs:ResourceStr=$r('app.media.cb_new')
|
||||||
|
@State inputText:string=''
|
||||||
|
@State
|
||||||
|
@Watch('onRefresh')
|
||||||
|
sort:string='1'
|
||||||
|
|
||||||
|
onRefresh()
|
||||||
|
{
|
||||||
|
this.pageNumber = 1;
|
||||||
|
this.getApplyList();
|
||||||
|
}
|
||||||
|
build() {
|
||||||
|
Column(){
|
||||||
|
HdNav({ title: '患教学堂', showRightIcon: false, showLeftIcon: true , isLeftAction:true,leftItemAction:()=>{
|
||||||
|
HMRouterMgr.pop()
|
||||||
|
}})
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.search_no')).width(15).height(15).margin({ right:5 })
|
||||||
|
Text('搜索').fontSize(14).fontColor($r('app.color.common_gray_03')).textAlign(TextAlign.Start)
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
.layoutWeight(1)
|
||||||
|
.justifyContent(FlexAlign.Center)
|
||||||
|
.onClick(()=>{
|
||||||
|
const pathInfo1: HMRouterPathInfo = {
|
||||||
|
pageUrl: 'SearchComp',
|
||||||
|
param:{type:'tuwen'}
|
||||||
|
|
||||||
|
};
|
||||||
|
const callback: HMRouterPathCallback = {
|
||||||
|
onResult: (popInfo: PopInfo) => {
|
||||||
|
const result = popInfo.result as string;
|
||||||
|
if(!StringIsEmpty(result))
|
||||||
|
{
|
||||||
|
HMRouterMgr.pop({param:result})
|
||||||
|
}
|
||||||
|
|
||||||
|
// this.sendHelloMessage(result,BasicConstant.Teach);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
HMRouterMgr.push(pathInfo1,callback)
|
||||||
|
// HMRouterMgr.push({ pageUrl: 'SearchComp' })
|
||||||
|
})
|
||||||
|
|
||||||
|
Text('|').fontColor($r('app.color.tab_text_nor'))
|
||||||
|
.fontSize(13)
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Text(this.Sorts).fontSize(14).fontColor($r('app.color.common_gray_03')).textAlign(TextAlign.Start)
|
||||||
|
.margin({ left:5 })
|
||||||
|
Image(this.Imgs).width(15).height(15)
|
||||||
|
}
|
||||||
|
.layoutWeight(1)
|
||||||
|
.justifyContent(FlexAlign.Center)
|
||||||
|
.onClick(()=>{
|
||||||
|
if(this.Sorts=='最新')
|
||||||
|
{
|
||||||
|
this.sort='2'
|
||||||
|
this.Sorts='最热'
|
||||||
|
this.Imgs=$r('app.media.cb_hot')
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.sort='1'
|
||||||
|
this.Sorts='最新'
|
||||||
|
this.Imgs=$r('app.media.cb_new')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}.width('100%').height(45)
|
||||||
|
Text().height(5).width('100%').backgroundColor($r('app.color.home_gray'))
|
||||||
|
if (this.isEmptyViewVisible){
|
||||||
|
EmptyViewComp({promptText:'暂无数据',isVisibility:this.isEmptyViewVisible}).layoutWeight(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PullToRefreshLayout({
|
||||||
|
scroller:this.scroller,
|
||||||
|
viewKey:"ListPage",
|
||||||
|
controller:this.controller,
|
||||||
|
contentView:()=>{
|
||||||
|
this.contentView()
|
||||||
|
},
|
||||||
|
|
||||||
|
onRefresh:()=>{
|
||||||
|
this.pageNumber = 1;
|
||||||
|
this.getApplyList();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.controller.refreshSuccess()
|
||||||
|
}, 1000)
|
||||||
|
},
|
||||||
|
onCanPullRefresh:()=>{
|
||||||
|
if (!this.scroller.currentOffset()) {
|
||||||
|
/*处理无数据,为空的情况*/
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
//如果列表到顶,返回true,表示可以下拉,返回false,表示无法下拉
|
||||||
|
return this.scroller.currentOffset().yOffset <= 0
|
||||||
|
},
|
||||||
|
onLoad:()=>{
|
||||||
|
this.pageNumber++;
|
||||||
|
this.getApplyList();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.controller.loadSuccess()
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
|
},
|
||||||
|
onCanPullLoad: () => {
|
||||||
|
if (this.pageNumber >= this.totalPageNumer) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).width('100%').layoutWeight(1).clip(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
contentView(){
|
||||||
|
List({ scroller: this.scroller }) {
|
||||||
|
ForEach(this.data, (item: PatientTBean, index) => {
|
||||||
|
ListItem() {
|
||||||
|
ItemCompTeach({item:item})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
.edgeEffect(EdgeEffect.None)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
322
features/netease/src/main/ets/view/VideoTeachComp.ets
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
import { BasicConstant,
|
||||||
|
ChangeUtil,
|
||||||
|
EmptyViewComp, hdHttp, HdLoadingDialog, HdNav, HdResponse, HdSearchNav } from '@itcast/basic'
|
||||||
|
import { HMRouter, HMRouterMgr, HMRouterPathCallback, HMRouterPathInfo } from '@hadss/hmrouter'
|
||||||
|
import { PullToRefreshLayout, RefreshController } from 'refreshlib'
|
||||||
|
import { HashMap } from '@kit.ArkTS';
|
||||||
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
|
import { promptAction } from '@kit.ArkUI';
|
||||||
|
import { StringIsEmpty } from '@nimkit/common';
|
||||||
|
import { patientVideoTypeModel, VideoTypeBean } from '../model/patientVideoTypeModel';
|
||||||
|
import { PatientVBean, TeachVideoModel } from '../model/TeachVideoModel';
|
||||||
|
import { ItemCompTeachVideo } from '../components/ItemCompTeachVideo';
|
||||||
|
|
||||||
|
@HMRouter({ pageUrl: 'VideoTeach' })
|
||||||
|
@Component
|
||||||
|
export struct VideoTeachComp {
|
||||||
|
dialog: CustomDialogController = new CustomDialogController({
|
||||||
|
builder: HdLoadingDialog({ message: '加载中...' }),
|
||||||
|
customStyle: true,
|
||||||
|
alignment: DialogAlignment.Center
|
||||||
|
})
|
||||||
|
@State pageNumber:number = 1;
|
||||||
|
@State totalPageNumer:number = 1;
|
||||||
|
@State data:PatientVBean[]=[];
|
||||||
|
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
|
||||||
|
@State beanType:VideoTypeBean[]=[];
|
||||||
|
aboutToAppear() {
|
||||||
|
this.patientVideoType()
|
||||||
|
this.getApplyList();
|
||||||
|
|
||||||
|
}
|
||||||
|
getApplyList() {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('page',this.pageNumber.toString());
|
||||||
|
hashMap.set("sort", this.sort);
|
||||||
|
hashMap.set("name", '');
|
||||||
|
if(this.typeUuid!='')
|
||||||
|
{
|
||||||
|
hashMap.set("typeUuid", this.typeUuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dialog.open()
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.patientVideoByName,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
let json:TeachVideoModel = JSON.parse(res+'') as TeachVideoModel;
|
||||||
|
if(json.code == '1') {
|
||||||
|
if(this.pageNumber==1)
|
||||||
|
{
|
||||||
|
this.data=[]
|
||||||
|
if(json.data!=null)
|
||||||
|
{
|
||||||
|
this.data = json.data.list;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(this.pageNumber>1)
|
||||||
|
{
|
||||||
|
this.data.push(...json.data.list)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.totalPageNumer =json.data.totalPage;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
promptAction.showToast({ message: json.message, duration: 1000 })
|
||||||
|
}
|
||||||
|
if (this.data.length > 0) {
|
||||||
|
this.isEmptyViewVisible = false;
|
||||||
|
} else {
|
||||||
|
this.isEmptyViewVisible = true;
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
patientVideoType() {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
this.dialog.open()
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.patientVideoType,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
let json:patientVideoTypeModel = JSON.parse(res+'') as patientVideoTypeModel;
|
||||||
|
|
||||||
|
|
||||||
|
this.beanType=[]
|
||||||
|
if(json.data!=null)
|
||||||
|
{
|
||||||
|
this.beanType = json.data;
|
||||||
|
for (let j = 0;j<this.beanType.length;j++){
|
||||||
|
let title:string = this.beanType[j].name
|
||||||
|
let s:string;
|
||||||
|
let digit:boolean = ChangeUtil.isFirstDigit(title.charAt(0));//判断首位是否是数字
|
||||||
|
let asciiAlpha :boolean= ChangeUtil.isLetter(title.charAt(0));//字母
|
||||||
|
if(digit||asciiAlpha){
|
||||||
|
let substring:string = '';
|
||||||
|
if (title.length>=4){
|
||||||
|
substring = title.substring(0, 4);//取出来前4位
|
||||||
|
}else if(title.length>=3){
|
||||||
|
substring = title.substring(0, 3);//取出来前3位
|
||||||
|
}else if (title.length>=2){
|
||||||
|
substring = title.substring(0, 2);//取出来前2位
|
||||||
|
}
|
||||||
|
if (substring.includes("-")){//含有-
|
||||||
|
let split: string[] = substring.split("-");
|
||||||
|
if (split.length>1){
|
||||||
|
s = split[split.length - 1] + title.substring(4, title.length);
|
||||||
|
}else {
|
||||||
|
s = title.substring(4, title.length);
|
||||||
|
}
|
||||||
|
this.beanType[j].name=s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if('乙肝'==this.beanType[j].name)
|
||||||
|
{
|
||||||
|
this.typeUuid=this.beanType[j].uuid
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
public controller:RefreshController = new RefreshController();
|
||||||
|
scroller = new Scroller();
|
||||||
|
@State Sorts:string='最新'
|
||||||
|
@State Imgs:ResourceStr=$r('app.media.cb_new')
|
||||||
|
@State notselectImg: ResourceStr = $r('app.media.triangle_normal');
|
||||||
|
@State selectImg: ResourceStr = $r('app.media.triangle_green_theme');
|
||||||
|
|
||||||
|
@State typePosition:number=-1
|
||||||
|
@State
|
||||||
|
@Watch('onRefresh')
|
||||||
|
sort:string='2'
|
||||||
|
@State
|
||||||
|
@Watch('onRefresh')
|
||||||
|
typeUuid:string=''
|
||||||
|
@State typelistStatus:boolean=false;
|
||||||
|
|
||||||
|
onRefresh()
|
||||||
|
{
|
||||||
|
this.pageNumber = 1;
|
||||||
|
this.getApplyList();
|
||||||
|
}
|
||||||
|
build() {
|
||||||
|
Column(){
|
||||||
|
HdNav({ title: '视频科普', showLeftIcon: true , isLeftAction:true,leftItemAction:()=>{
|
||||||
|
HMRouterMgr.pop()
|
||||||
|
}, showRightIcon: true,rightIcon:$r('app.media.selected_hospital_ws'),rightItemAction:()=> {
|
||||||
|
|
||||||
|
const pathInfo1: HMRouterPathInfo = {
|
||||||
|
pageUrl: 'SearchComp',
|
||||||
|
param:{type:'video',sort:this.sort,typeUuid:this.typeUuid}
|
||||||
|
|
||||||
|
};
|
||||||
|
const callback: HMRouterPathCallback = {
|
||||||
|
onResult: (popInfo: PopInfo) => {
|
||||||
|
const result = popInfo.result as string;
|
||||||
|
if(!StringIsEmpty(result))
|
||||||
|
{
|
||||||
|
HMRouterMgr.pop({param:result})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
HMRouterMgr.push(pathInfo1,callback)
|
||||||
|
}})
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Row() {
|
||||||
|
|
||||||
|
Text(this.typePosition==-1?'乙肝':this.beanType[this.typePosition].name).fontSize(14)
|
||||||
|
.fontColor(this.typePosition==-1?$r('app.color.common_gray_03'):$r('app.color.top_title')).textAlign(TextAlign.Start)
|
||||||
|
.maxLines(1)
|
||||||
|
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
Image(this.typePosition==-1?this.notselectImg:this.selectImg).width(15).height(15).margin({ right:5 })
|
||||||
|
|
||||||
|
}
|
||||||
|
.padding({left:30,right:30})
|
||||||
|
.layoutWeight(1)
|
||||||
|
.justifyContent(FlexAlign.Center)
|
||||||
|
.onClick(()=>{
|
||||||
|
this.typelistStatus=!this.typelistStatus
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
Text('|').fontColor($r('app.color.tab_text_nor'))
|
||||||
|
.fontSize(13)
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Text(this.Sorts).fontSize(14).fontColor($r('app.color.common_gray_03')).textAlign(TextAlign.Start)
|
||||||
|
.margin({ left:5 })
|
||||||
|
Image(this.Imgs).width(15).height(15)
|
||||||
|
}
|
||||||
|
.layoutWeight(1)
|
||||||
|
.justifyContent(FlexAlign.Center)
|
||||||
|
.onClick(()=>{
|
||||||
|
if(this.Sorts=='最新')
|
||||||
|
{
|
||||||
|
this.sort='1'
|
||||||
|
this.Sorts='最热'
|
||||||
|
this.Imgs=$r('app.media.cb_hot')
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.sort='2'
|
||||||
|
this.Sorts='最新'
|
||||||
|
this.Imgs=$r('app.media.cb_new')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}.width('100%').height(45)
|
||||||
|
Text().height(5).width('100%').backgroundColor($r('app.color.home_gray'))
|
||||||
|
Stack({ }) {
|
||||||
|
if (this.isEmptyViewVisible){
|
||||||
|
EmptyViewComp({promptText:'暂无视频科普',isVisibility:this.isEmptyViewVisible}).width('100%')
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PullToRefreshLayout({
|
||||||
|
scroller:this.scroller,
|
||||||
|
viewKey:"ListPage",
|
||||||
|
controller:this.controller,
|
||||||
|
contentView:()=>{
|
||||||
|
this.contentView()
|
||||||
|
},
|
||||||
|
|
||||||
|
onRefresh:()=>{
|
||||||
|
this.pageNumber = 1;
|
||||||
|
this.getApplyList();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.controller.refreshSuccess()
|
||||||
|
}, 1000)
|
||||||
|
},
|
||||||
|
onCanPullRefresh:()=>{
|
||||||
|
if (!this.scroller.currentOffset()) {
|
||||||
|
/*处理无数据,为空的情况*/
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
//如果列表到顶,返回true,表示可以下拉,返回false,表示无法下拉
|
||||||
|
return this.scroller.currentOffset().yOffset <= 0
|
||||||
|
},
|
||||||
|
onLoad:()=>{
|
||||||
|
this.pageNumber++;
|
||||||
|
this.getApplyList();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.controller.loadSuccess()
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
|
},
|
||||||
|
onCanPullLoad: () => {
|
||||||
|
if (this.pageNumber >= this.totalPageNumer) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).width('100%') .height('100%').clip(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List() {
|
||||||
|
ForEach(this.beanType, (item: VideoTypeBean,index:number) => {
|
||||||
|
ListItem() {
|
||||||
|
Column() {
|
||||||
|
|
||||||
|
Text(item.name).fontColor(this.typePosition==index?$r('app.color.top_title'):$r('app.color.tab_text_nor'))
|
||||||
|
.fontSize(14).height(40)
|
||||||
|
.padding({left:10})
|
||||||
|
.width('100%')
|
||||||
|
.alignSelf(ItemAlign.Start)
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.justifyContent(FlexAlign.Start)
|
||||||
|
.onClick(()=>{
|
||||||
|
this.typePosition=index
|
||||||
|
this.typeUuid=item.uuid
|
||||||
|
this.typelistStatus=false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, (item: VideoTypeBean) => JSON.stringify(item))
|
||||||
|
} .width('100%')
|
||||||
|
.height('100%')
|
||||||
|
.visibility(this.typelistStatus?Visibility.Visible:Visibility.None)
|
||||||
|
.backgroundColor(Color.White)
|
||||||
|
}
|
||||||
|
.layoutWeight(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
contentView(){
|
||||||
|
List({ scroller: this.scroller }) {
|
||||||
|
ForEach(this.data, (item: PatientVBean, index) => {
|
||||||
|
ListItem() {
|
||||||
|
ItemCompTeachVideo({item:item})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
.edgeEffect(EdgeEffect.None)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -5,6 +5,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
|
||||||
import { BasicConstant, ChatParam, preferenceStore } from '@itcast/basic';
|
import { BasicConstant, ChatParam, preferenceStore } from '@itcast/basic';
|
||||||
import { ChatKitClient, ChatRepo, NEUserWithFriend, PersonSelectParam, TeamRepo } from '@nimkit/chatkit';
|
import { ChatKitClient, ChatRepo, NEUserWithFriend, PersonSelectParam, TeamRepo } from '@nimkit/chatkit';
|
||||||
import { CommonEmptyResult, CommonLongLoadingProgress, NetworkBrokenBuilder } from '@nimkit/common';
|
import { CommonEmptyResult, CommonLongLoadingProgress, NetworkBrokenBuilder } from '@nimkit/common';
|
||||||
@ -12,10 +13,12 @@ import { V2NIMConversationType, V2NIMLocalConversation } from '@nimsdk/base';
|
|||||||
import { AitServer } from '../service/ait/AitService';
|
import { AitServer } from '../service/ait/AitService';
|
||||||
import { ConversationViewItem } from '../view/ConversationViewItem';
|
import { ConversationViewItem } from '../view/ConversationViewItem';
|
||||||
import { LocalConversationViewModel } from '../viewmodel/LocalConversationViewModel';
|
import { LocalConversationViewModel } from '../viewmodel/LocalConversationViewModel';
|
||||||
|
@HMRouter({
|
||||||
|
pageUrl: 'LocalConversationPage'
|
||||||
|
})
|
||||||
@ComponentV2
|
@ComponentV2
|
||||||
export struct LocalConversationPage {
|
export struct LocalConversationPage {
|
||||||
@Param pathStack: NavPathStack = new NavPathStack()
|
// @Param pathStack: NavPathStack = new NavPathStack()
|
||||||
@Param onUreadMessageChange?: (unreadCount?: number) => void = undefined
|
@Param onUreadMessageChange?: (unreadCount?: number) => void = undefined
|
||||||
private viewModel: LocalConversationViewModel = new LocalConversationViewModel()
|
private viewModel: LocalConversationViewModel = new LocalConversationViewModel()
|
||||||
|
|
||||||
@ -28,7 +31,7 @@ export struct LocalConversationPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
NavDestination() {
|
// NavDestination() {
|
||||||
if (this.viewModel.conversationList) {
|
if (this.viewModel.conversationList) {
|
||||||
if (this.viewModel.conversationList.length <= 0 && this.viewModel.isFinishedSyncLoad) {
|
if (this.viewModel.conversationList.length <= 0 && this.viewModel.isFinishedSyncLoad) {
|
||||||
CommonEmptyResult({
|
CommonEmptyResult({
|
||||||
@ -73,18 +76,18 @@ export struct LocalConversationPage {
|
|||||||
CommonLongLoadingProgress({ contentText: $r('app.string.conversation_loading') })
|
CommonLongLoadingProgress({ contentText: $r('app.string.conversation_loading') })
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// }
|
||||||
.hideTitleBar(true)
|
// .hideTitleBar(true)
|
||||||
// .title(this.titleBuilder)
|
// .title(this.titleBuilder)
|
||||||
.backgroundColor(Color.White)
|
// .backgroundColor(Color.White)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Builder
|
// @Builder
|
||||||
titleBuilder() {
|
// titleBuilder() {
|
||||||
ConversationNavigationTitleBar({
|
// ConversationNavigationTitleBar({
|
||||||
pathStack: this.pathStack
|
// pathStack: this.pathStack
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跳转到聊天页面
|
* 跳转到聊天页面
|
||||||
@ -93,15 +96,16 @@ export struct LocalConversationPage {
|
|||||||
if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P) {
|
if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P) {
|
||||||
preferenceStore.setItemString('gdxz_consult_uuid','')
|
preferenceStore.setItemString('gdxz_consult_uuid','')
|
||||||
preferenceStore.setItemString('gdxz_sessionType',BasicConstant.general)
|
preferenceStore.setItemString('gdxz_sessionType',BasicConstant.general)
|
||||||
this.pathStack.pushPath({ name: "ChatP2PPage",
|
HMRouterMgr.push({ pageUrl: 'ChatP2PPage' , param: {
|
||||||
param: {
|
conversationId:conversationInfo.conversationId
|
||||||
// gdxz_sessionType:BasicConstant.general,
|
} as ChatParam})
|
||||||
conversationId:conversationInfo.conversationId
|
// this.pathStack.pushPath({ name: "ChatP2PPage",
|
||||||
} as ChatParam
|
// param: {
|
||||||
|
// conversationId:conversationInfo.conversationId
|
||||||
})
|
// } as ChatParam
|
||||||
|
// })
|
||||||
} else if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM) {
|
} else if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_TEAM) {
|
||||||
this.pathStack.pushPath({ name: "ChatTeamPage", param: conversationInfo.conversationId })
|
// this.pathStack.pushPath({ name: "ChatTeamPage", param: conversationInfo.conversationId })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -356,8 +360,8 @@ struct ConversationNavigationTitleBar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 跳转页面入口函数
|
// // 跳转页面入口函数
|
||||||
@Builder
|
// @Builder
|
||||||
export function LocalConversationPageBuilder() {
|
// export function LocalConversationPageBuilder() {
|
||||||
LocalConversationPage()
|
// LocalConversationPage()
|
||||||
}
|
// }
|
||||||
@ -0,0 +1,363 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 NetEase, Inc. All rights reserved.
|
||||||
|
* Use of this source code is governed by a MIT license that can be
|
||||||
|
* found in the LICENSE file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
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';
|
||||||
|
import { AitServer } from '../service/ait/AitService';
|
||||||
|
import { ConversationViewItem } from '../view/ConversationViewItem';
|
||||||
|
import { LocalConversationViewModel } from '../viewmodel/LocalConversationViewModel';
|
||||||
|
|
||||||
|
@ComponentV2
|
||||||
|
export struct LocalConversationPage {
|
||||||
|
@Param pathStack: NavPathStack = new NavPathStack()
|
||||||
|
@Param onUreadMessageChange?: (unreadCount?: number) => void = undefined
|
||||||
|
private viewModel: LocalConversationViewModel = new LocalConversationViewModel()
|
||||||
|
|
||||||
|
aboutToAppear(): void {
|
||||||
|
|
||||||
|
this.viewModel.onUreadMessageChange = this.onUreadMessageChange
|
||||||
|
//初始化@ 服务
|
||||||
|
AitServer.instance.init()
|
||||||
|
this.viewModel.initConversation()
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
NavDestination() {
|
||||||
|
if (this.viewModel.conversationList) {
|
||||||
|
if (this.viewModel.conversationList.length <= 0 && this.viewModel.isFinishedSyncLoad) {
|
||||||
|
CommonEmptyResult({
|
||||||
|
tips: $r('app.string.conversation_empty')
|
||||||
|
}).margin({
|
||||||
|
top: 80
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if (this.viewModel.networkBroken) {
|
||||||
|
NetworkBrokenBuilder()
|
||||||
|
}
|
||||||
|
|
||||||
|
List() {
|
||||||
|
ForEach(this.viewModel.conversationList, (item: V2NIMLocalConversation) => {
|
||||||
|
ListItem() {
|
||||||
|
ConversationViewItem({
|
||||||
|
conversationInfo: item,
|
||||||
|
haveBeanAit: this.viewModel.aitConversationList.has(item.conversationId),
|
||||||
|
onItemClick: () => {
|
||||||
|
//goto ChatPage
|
||||||
|
this.goToChatPage(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.listDirection(Axis.Vertical)
|
||||||
|
.onReachEnd(() => {
|
||||||
|
if (this.viewModel.conversationList &&
|
||||||
|
this.viewModel.conversationList.length > 0 &&
|
||||||
|
!this.viewModel.isFinished) {
|
||||||
|
this.viewModel.loadConversation()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.scrollBar(BarState.Off)
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
.backgroundColor('#ffFFFFFF')
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
CommonLongLoadingProgress({ contentText: $r('app.string.conversation_loading') })
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
.hideTitleBar(true)
|
||||||
|
// .title(this.titleBuilder)
|
||||||
|
.backgroundColor(Color.White)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
titleBuilder() {
|
||||||
|
ConversationNavigationTitleBar({
|
||||||
|
pathStack: this.pathStack
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转到聊天页面
|
||||||
|
*/
|
||||||
|
goToChatPage(conversationInfo: V2NIMLocalConversation) {
|
||||||
|
if (conversationInfo?.type == V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P) {
|
||||||
|
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 })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ComponentV2
|
||||||
|
struct ConversationNavigationTitleBar {
|
||||||
|
@Local conversationPopupShowed: boolean = false
|
||||||
|
@Param pathStack: NavPathStack = new NavPathStack()
|
||||||
|
|
||||||
|
build() {
|
||||||
|
Column({ space: 10 }) {
|
||||||
|
Row() {
|
||||||
|
//标题栏左侧图标
|
||||||
|
Image($r('app.media.brand'))
|
||||||
|
.margin({ left: 20 })
|
||||||
|
.width(32)
|
||||||
|
.height(32)
|
||||||
|
.objectFit(ImageFit.Contain)
|
||||||
|
//标题栏左侧文字
|
||||||
|
Text($r('app.string.conversation_title'))
|
||||||
|
.fontSize(20)
|
||||||
|
.fontWeight(FontWeight.Bold)
|
||||||
|
.height(32)
|
||||||
|
.width('100%')
|
||||||
|
.margin({ left: 12, right: 12 })
|
||||||
|
.layoutWeight(2)
|
||||||
|
.textAlign(TextAlign.Start)
|
||||||
|
.maxLines(1)
|
||||||
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
|
|
||||||
|
|
||||||
|
Row()
|
||||||
|
.height(1)
|
||||||
|
.layoutWeight(1)
|
||||||
|
|
||||||
|
//标题栏右侧搜索图标
|
||||||
|
Image($r('app.media.nav_search'))
|
||||||
|
.width(32)
|
||||||
|
.height(32)
|
||||||
|
.padding({
|
||||||
|
left: 3,
|
||||||
|
right: 3,
|
||||||
|
top: 3,
|
||||||
|
bottom: 3
|
||||||
|
})
|
||||||
|
.margin({ right: 10 })
|
||||||
|
.onClick(() => {
|
||||||
|
//点击去搜索
|
||||||
|
this.goSearchPage(this.pathStack)
|
||||||
|
})
|
||||||
|
|
||||||
|
//标题栏右侧更多按钮图标
|
||||||
|
Image($r('app.media.nav_add'))
|
||||||
|
.width(32)
|
||||||
|
.height(32)
|
||||||
|
.padding({
|
||||||
|
left: 3,
|
||||||
|
right: 3,
|
||||||
|
top: 3,
|
||||||
|
bottom: 3
|
||||||
|
})
|
||||||
|
.margin({ right: 20 })
|
||||||
|
.onClick(() => {
|
||||||
|
this.conversationPopupShowed = !this.conversationPopupShowed
|
||||||
|
})
|
||||||
|
.bindPopup(this.conversationPopupShowed,
|
||||||
|
//右侧更多操作弹框
|
||||||
|
{
|
||||||
|
targetSpace: 'popupLocation',
|
||||||
|
builder: this.popupBuilder,
|
||||||
|
placement: Placement.Bottom,
|
||||||
|
mask: true,
|
||||||
|
popupColor: Color.White,
|
||||||
|
enableArrow: false,
|
||||||
|
showInSubWindow: false,
|
||||||
|
autoCancel: true,
|
||||||
|
onStateChange: (e) => {
|
||||||
|
if (!e.isVisible) {
|
||||||
|
this.conversationPopupShowed = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
.height(55)
|
||||||
|
.alignSelf(ItemAlign.Start)
|
||||||
|
|
||||||
|
Row()
|
||||||
|
.width('100%')
|
||||||
|
.height(1)
|
||||||
|
.backgroundColor("#E9EFF5")
|
||||||
|
}
|
||||||
|
.height('100%')
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
popupBuilder() {
|
||||||
|
Column({ space: 16 }) {
|
||||||
|
//添加好友
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.friend_add'))
|
||||||
|
.width(14)
|
||||||
|
.height(14)
|
||||||
|
Text($r('app.string.add_friend'))
|
||||||
|
.fontSize(14)
|
||||||
|
.fontColor('#ff333333')
|
||||||
|
.margin({ left: 6 })
|
||||||
|
}.onClick(() => {
|
||||||
|
if (this.conversationPopupShowed) {
|
||||||
|
this.conversationPopupShowed = false
|
||||||
|
this.goAddFriend(this.pathStack)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//创建讨论组
|
||||||
|
Row() {
|
||||||
|
Image($r('app.media.team_discuss'))
|
||||||
|
.width(14)
|
||||||
|
.height(14)
|
||||||
|
Text($r('app.string.create_discuss_team'))
|
||||||
|
.fontSize(14)
|
||||||
|
.fontColor('#ff333333')
|
||||||
|
.margin({ left: 6 })
|
||||||
|
}.onClick(() => {
|
||||||
|
if (this.conversationPopupShowed) {
|
||||||
|
this.conversationPopupShowed = false
|
||||||
|
this.goToPersonSelectPage(this.pathStack, true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//创建高级群
|
||||||
|
Row() {
|
||||||
|
Image($r("app.media.team_advance"))
|
||||||
|
.width(14)
|
||||||
|
.height(14)
|
||||||
|
Text($r('app.string.create_advance_team'))
|
||||||
|
.fontSize(14)
|
||||||
|
.fontColor('#ff333333')
|
||||||
|
.margin({ left: 6 })
|
||||||
|
}.onClick(() => {
|
||||||
|
if (this.conversationPopupShowed) {
|
||||||
|
this.conversationPopupShowed = false
|
||||||
|
this.goToPersonSelectPage(this.pathStack, false)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.width(122)
|
||||||
|
.padding({
|
||||||
|
top: 16,
|
||||||
|
left: 16,
|
||||||
|
bottom: 16
|
||||||
|
})
|
||||||
|
.alignItems(HorizontalAlign.Start)
|
||||||
|
.borderRadius(8)
|
||||||
|
.backgroundColor('#ffFFFFFF')
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索页面
|
||||||
|
*/
|
||||||
|
goSearchPage(pathStack: NavPathStack) {
|
||||||
|
pathStack.pushPath({ name: "SearchPage" })
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加好友
|
||||||
|
*/
|
||||||
|
goAddFriend(pathStack: NavPathStack) {
|
||||||
|
pathStack.pushPath({ name: "AddFriendPage" })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建讨论组的人选选择器返回
|
||||||
|
groupSelectorCallback = async (selectedList: NEUserWithFriend[]) => {
|
||||||
|
try {
|
||||||
|
this.pathStack.pop()
|
||||||
|
let invitees = selectedList.map(user => user.user?.accountId ?? '')
|
||||||
|
this.createGroupTeam(invitees)
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 创建高级群的人选选择器返回
|
||||||
|
teamSelectorCallback = async (selectedList: NEUserWithFriend[]) => {
|
||||||
|
try {
|
||||||
|
this.pathStack.pop()
|
||||||
|
let invitees = selectedList.map(user => user.user?.accountId ?? '')
|
||||||
|
this.createAdvanceTeam(invitees)
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转到人员选择器
|
||||||
|
* @param pathStack
|
||||||
|
* @param isGroup
|
||||||
|
*/
|
||||||
|
goToPersonSelectPage(pathStack: NavPathStack, isGroup: boolean) {
|
||||||
|
if (isGroup) {
|
||||||
|
pathStack.pushPath({
|
||||||
|
name: "PersonSelectPage",
|
||||||
|
param: new PersonSelectParam(this.groupSelectorCallback)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
pathStack.pushPath({
|
||||||
|
name: "PersonSelectPage",
|
||||||
|
param: new PersonSelectParam(this.teamSelectorCallback)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建讨论组
|
||||||
|
*/
|
||||||
|
createGroupTeam(invitees: string[]) {
|
||||||
|
TeamRepo.createGroupTeam(invitees).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
// 跳转到聊天页面
|
||||||
|
this.pathStack.pushPath({
|
||||||
|
name: "ChatTeamPage",
|
||||||
|
param: ChatKitClient.nim.conversationIdUtil.teamConversationId(result.team.teamId)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建高级群
|
||||||
|
*/
|
||||||
|
createAdvanceTeam(invitees: string[]) {
|
||||||
|
TeamRepo.createAdvanceTeam(invitees).then((result) => {
|
||||||
|
if (result) {
|
||||||
|
//1,本地保存一条消息
|
||||||
|
let message = ChatKitClient.nim.messageCreator.createTipsMessage(
|
||||||
|
getContext(this).resourceManager.getStringSync($r('app.string.createAdvancedTeamSuccess'))
|
||||||
|
)
|
||||||
|
ChatRepo.saveLocalMessage(message,
|
||||||
|
ChatKitClient.nim.conversationIdUtil.teamConversationId(result.team.teamId),
|
||||||
|
ChatKitClient.getLoginUserId(),
|
||||||
|
(new Date()).valueOf() - 500
|
||||||
|
)
|
||||||
|
// 2 跳转到聊天页面
|
||||||
|
this.pathStack.pushPath({
|
||||||
|
name: "ChatTeamPage",
|
||||||
|
param: ChatKitClient.nim.conversationIdUtil.teamConversationId(result.team.teamId)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 跳转页面入口函数
|
||||||
|
@Builder
|
||||||
|
export function LocalConversationPageBuilder() {
|
||||||
|
LocalConversationPage()
|
||||||
|
}
|
||||||
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"routerMap": [
|
"routerMap": [
|
||||||
{
|
// {
|
||||||
"name": "LocalConversationPage",
|
// "name": "LocalConversationPage",
|
||||||
"pageSourceFile": "src/main/ets/pages/LocalConversationPage.ets",
|
// "pageSourceFile": "src/main/ets/pages/LocalConversationPage.ets",
|
||||||
"buildFunction": "LocalConversationPageBuilder",
|
// "buildFunction": "LocalConversationPageBuilder",
|
||||||
"data": {
|
// "data": {
|
||||||
"description": "this is Conversation list page"
|
// "description": "this is Conversation list page"
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -1,11 +1,16 @@
|
|||||||
import { GuidePage } from 'register'
|
import { GuidePage } from 'register'
|
||||||
|
import { AttributeUpdater } from '@kit.ArkUI';
|
||||||
|
import { HMDefaultGlobalAnimator, HMNavigation } from '@hadss/hmrouter';
|
||||||
|
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct Index {
|
struct Index {
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
Column() {
|
Column() {
|
||||||
GuidePage()
|
GuidePage()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,41 @@
|
|||||||
import { router } from '@kit.ArkUI'
|
import { HMDefaultGlobalAnimator, HMNavigation } from '@hadss/hmrouter';
|
||||||
|
import { AttributeUpdater, router } from '@kit.ArkUI'
|
||||||
import { ConsultationDetailComp } from 'netease'
|
import { ConsultationDetailComp } from 'netease'
|
||||||
|
class NavModifier extends AttributeUpdater<NavigationAttribute> {
|
||||||
|
initializeModifier(instance: NavigationAttribute): void {
|
||||||
|
instance.mode(NavigationMode.Stack);
|
||||||
|
instance.navBarWidth('100%');
|
||||||
|
instance.hideTitleBar(true);
|
||||||
|
instance.hideToolBar(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct ConsultationDetailPage {
|
struct ConsultationDetailPage {
|
||||||
|
modifier: NavModifier = new NavModifier()
|
||||||
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
// @State params:Record<string, string> = router.getParams() as Record<string, string>;
|
// @State params:Record<string, string> = router.getParams() as Record<string, string>;
|
||||||
build() {
|
build() {
|
||||||
RelativeContainer() {
|
// Navigation(this.pathStack) {
|
||||||
ConsultationDetailComp()
|
Column(){
|
||||||
|
HMNavigation({
|
||||||
|
navigationId: 'ConsultationDetailNavigations', homePageUrl: 'ConsultationDetailPages',
|
||||||
|
options: {
|
||||||
|
standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
|
||||||
|
dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
|
||||||
|
modifier: this.modifier
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
ConsultationDetailComp()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.height('100%')
|
.height('100%')
|
||||||
.width('100%')
|
.width('100%')
|
||||||
|
// }
|
||||||
|
// .mode(NavigationMode.Auto)
|
||||||
|
// .hideTitleBar(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,9 +1,20 @@
|
|||||||
import { TabBarConsultationComp } from 'netease';
|
import { TabBarConsultationComp } from 'netease';
|
||||||
|
import { AttributeUpdater } from '@kit.ArkUI';
|
||||||
|
import { HMDefaultGlobalAnimator, HMNavigation } from '@hadss/hmrouter';
|
||||||
|
|
||||||
|
class NavModifier extends AttributeUpdater<NavigationAttribute> {
|
||||||
|
initializeModifier(instance: NavigationAttribute): void {
|
||||||
|
instance.mode(NavigationMode.Stack);
|
||||||
|
instance.navBarWidth('100%');
|
||||||
|
instance.hideTitleBar(true);
|
||||||
|
instance.hideToolBar(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct PublicConsultationPage {
|
struct PublicConsultationPage {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
|
modifier: NavModifier = new NavModifier()
|
||||||
@State
|
@State
|
||||||
@Watch('onChangeIndex')
|
@Watch('onChangeIndex')
|
||||||
activeIndex: number = 0
|
activeIndex: number = 0
|
||||||
@ -22,17 +33,32 @@ struct PublicConsultationPage {
|
|||||||
this.onChangeIndex()
|
this.onChangeIndex()
|
||||||
}
|
}
|
||||||
build() {
|
build() {
|
||||||
Navigation(this.pathStack) {
|
// Navigation(this.pathStack) {
|
||||||
Flex() {
|
Column()
|
||||||
TabBarConsultationComp({ activeIndex: this.activeIndex, pathStack: this.pathStack})
|
{
|
||||||
|
HMNavigation({
|
||||||
|
navigationId: 'PublicConsultationPageNavigations', homePageUrl: 'PublicConsultationPage',
|
||||||
|
options: {
|
||||||
|
standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
|
||||||
|
dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
|
||||||
|
modifier: this.modifier
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Flex() {
|
||||||
|
TabBarConsultationComp({ activeIndex: this.activeIndex})
|
||||||
|
}
|
||||||
|
.backgroundColor($r('app.color.white'))
|
||||||
}
|
}
|
||||||
.backgroundColor($r('app.color.white'))
|
}
|
||||||
|
|
||||||
|
|
||||||
// .backgroundColor(Color.Red)
|
// .backgroundColor(Color.Red)
|
||||||
// .height('100%')
|
// .height('100%')
|
||||||
// .width('100%')
|
// .width('100%')
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
.mode(NavigationMode.Auto)
|
// .mode(NavigationMode.Auto)
|
||||||
.hideTitleBar(true)
|
// .hideTitleBar(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,9 +1,19 @@
|
|||||||
|
import { HMDefaultGlobalAnimator, HMNavigation } from '@hadss/hmrouter';
|
||||||
import { TabBarComp } from 'netease';
|
import { TabBarComp } from 'netease';
|
||||||
|
import { AttributeUpdater } from '@kit.ArkUI';
|
||||||
|
class NavModifier extends AttributeUpdater<NavigationAttribute> {
|
||||||
|
initializeModifier(instance: NavigationAttribute): void {
|
||||||
|
instance.mode(NavigationMode.Stack);
|
||||||
|
instance.navBarWidth('100%');
|
||||||
|
instance.hideTitleBar(true);
|
||||||
|
instance.hideToolBar(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct ImTabPage {
|
struct ImTabPage {
|
||||||
pathStack: NavPathStack = new NavPathStack()
|
// pathStack: NavPathStack = new NavPathStack()
|
||||||
|
modifier: NavModifier = new NavModifier()
|
||||||
@State
|
@State
|
||||||
@Watch('onChangeIndex')
|
@Watch('onChangeIndex')
|
||||||
activeIndex: number = 0
|
activeIndex: number = 0
|
||||||
@ -22,16 +32,33 @@ struct ImTabPage {
|
|||||||
this.onChangeIndex()
|
this.onChangeIndex()
|
||||||
}
|
}
|
||||||
build() {
|
build() {
|
||||||
Navigation(this.pathStack) {
|
// Navigation(this.pathStack) {
|
||||||
Flex() {
|
Column()
|
||||||
TabBarComp({ activeIndex: this.activeIndex, pathStack: this.pathStack})
|
{
|
||||||
|
HMNavigation({
|
||||||
|
navigationId: 'MainNavigations', homePageUrl: 'ImTabPage',
|
||||||
|
options: {
|
||||||
|
standardAnimator: HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
|
||||||
|
dialogAnimator: HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
|
||||||
|
modifier: this.modifier
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Flex() {
|
||||||
|
TabBarComp({ activeIndex: this.activeIndex})
|
||||||
|
}
|
||||||
|
.backgroundColor($r('app.color.white'))
|
||||||
}
|
}
|
||||||
.backgroundColor($r('app.color.white'))
|
|
||||||
// .backgroundColor(Color.Red)
|
|
||||||
// .height('100%')
|
|
||||||
// .width('100%')
|
|
||||||
}
|
}
|
||||||
.mode(NavigationMode.Auto)
|
.width('100%')
|
||||||
.hideTitleBar(true)
|
.height('100%')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
// .mode(NavigationMode.Auto)
|
||||||
|
// .hideTitleBar(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -0,0 +1,292 @@
|
|||||||
|
import { PLVMediaPlayerSingleVideoLayout } from 'scene_single_video';
|
||||||
|
import { DependScope, Disposable, requireNotNull, runCatching } from '@polyvharmony/media-player-sdk';
|
||||||
|
import {
|
||||||
|
createId,
|
||||||
|
PLVMediaPlayerScenes,
|
||||||
|
PLVMediaPlayerSingleVideoPageParam,
|
||||||
|
PLVMPPageControlViewModel,
|
||||||
|
PLVOrientationManager,
|
||||||
|
PLVOrientationManagerObserver
|
||||||
|
} from 'media-player-common';
|
||||||
|
import common from '@ohos.app.ability.common';
|
||||||
|
import window from '@ohos.window';
|
||||||
|
import { createDependScope } from '@polyvharmony/media-player-sdk'
|
||||||
|
import {
|
||||||
|
commonPageModule,getDisplayWindowWidth
|
||||||
|
} from 'media-player-common'
|
||||||
|
import { HdNav,BasicConstant ,authStore} from '@itcast/basic'
|
||||||
|
import HashMap from '@ohos.util.HashMap';
|
||||||
|
import { hdHttp, HdResponse ,logger} from '@itcast/basic/Index'
|
||||||
|
import { emitter,BusinessError } from '@kit.BasicServicesKit';
|
||||||
|
import { VideoDetailModel,VideoCommentModel,commentModel,VideoDetailsComment } from 'home'
|
||||||
|
import { router,promptAction } from '@kit.ArkUI';
|
||||||
|
import inputMethod from '@ohos.inputMethod';
|
||||||
|
|
||||||
|
@Entry
|
||||||
|
@Component
|
||||||
|
export struct PLVMediaPlayerOnlyVideoPage {
|
||||||
|
@Provide pageDependScope: DependScope = createDependScope(commonPageModule)
|
||||||
|
// @Consume pageDependScope: DependScope
|
||||||
|
private params: VideoPageParam = router.getParams() as VideoPageParam
|
||||||
|
|
||||||
|
private param: PLVMediaPlayerSingleVideoPageParam = this.params.param
|
||||||
|
private context = getContext(this) as common.UIAbilityContext
|
||||||
|
private pageControlViewModel: PLVMPPageControlViewModel = this.pageDependScope.get(PLVMPPageControlViewModel)
|
||||||
|
private onBackPressDisposable: Disposable | undefined = undefined
|
||||||
|
private readonly plv_media_player_single_video_background: string = createId()
|
||||||
|
|
||||||
|
@State isPortrait: boolean = true;//是否竖屏
|
||||||
|
@State commentList:Array<commentModel> = [];//评论列表
|
||||||
|
@State commentContent:string = '';//评论内容
|
||||||
|
scroller: Scroller = new Scroller();
|
||||||
|
@State note:string=''
|
||||||
|
aboutToAppear(): void {
|
||||||
|
requireNotNull(this.param, () => "param is null")
|
||||||
|
this.onBackPressDisposable = this.pageControlViewModel.onBackPressHandler.register(10, () => this.onBackPress())
|
||||||
|
runCatching(async () => {
|
||||||
|
const windowInstance = await window.getLastWindow(this.context)
|
||||||
|
windowInstance.setWindowKeepScreenOn(true)
|
||||||
|
})
|
||||||
|
this.getVideoDetail(this.params.video_uuid)
|
||||||
|
this.getCommentdata(this.params.video_uuid)
|
||||||
|
|
||||||
|
PLVOrientationManager.getInstance().isPortrait.observe((isPortrait) => {
|
||||||
|
if (typeof isPortrait === 'boolean') {
|
||||||
|
this.isPortrait = isPortrait
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
emitter.on({ eventId: BasicConstant.notification_back_refreshData }, () => {
|
||||||
|
this.getCommentdata(this.params.video_uuid)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
@State currentIndex: number = 0;
|
||||||
|
|
||||||
|
@Builder tabBuilder(title: string, targetIndex: number) {
|
||||||
|
Column() {
|
||||||
|
Text(title)
|
||||||
|
.fontColor(this.currentIndex === targetIndex ? '#8D2316' : '#848284')
|
||||||
|
.fontSize(14)
|
||||||
|
.lineHeight(45)
|
||||||
|
.height(45)
|
||||||
|
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height(50)
|
||||||
|
.justifyContent(FlexAlign.Center)
|
||||||
|
}
|
||||||
|
build() {
|
||||||
|
Column(){
|
||||||
|
if (this.isPortrait) {
|
||||||
|
HdNav({ title: '视频详情', showRightIcon: false, showLeftIcon: true })
|
||||||
|
}
|
||||||
|
|
||||||
|
Stack() {
|
||||||
|
// 背景图
|
||||||
|
// Image($r('app.media.plv_media_player_video_item_background_portrait'))
|
||||||
|
// .id(this.plv_media_player_single_video_background)
|
||||||
|
// .objectFit(ImageFit.Cover)
|
||||||
|
// .expandSafeArea(undefined, [SafeAreaEdge.BOTTOM])
|
||||||
|
|
||||||
|
PLVMediaPlayerSingleVideoLayout({
|
||||||
|
mediaResource: this.param.mediaResource,
|
||||||
|
enterFromDownloadCenter: this.param.enterFromDownloadCenter
|
||||||
|
})
|
||||||
|
|
||||||
|
// 屏幕方向监听器
|
||||||
|
PLVOrientationManagerObserver()
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height(this.getPlayerAreaHeight())
|
||||||
|
|
||||||
|
// Tabs() {
|
||||||
|
// TabContent() {
|
||||||
|
// Scroll(this.scroller) {
|
||||||
|
// Text(this.note).fontSize(14).fontColor(Color.Black)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// .align(Alignment.TopStart)
|
||||||
|
// .padding(15)
|
||||||
|
// .customTabbar('视频简介')
|
||||||
|
//
|
||||||
|
// TabContent() {
|
||||||
|
// Column() {
|
||||||
|
// List(){
|
||||||
|
// ForEach(this.commentList,(model:commentModel)=>{
|
||||||
|
// ListItem(){
|
||||||
|
// VideoDetailsComment({model:model,videoCommentUuid:this.params.video_uuid});
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// }.height('calc(100% - 100vp)').width('100%').backgroundColor('#f4f4f4').scrollBar(BarState.Off)
|
||||||
|
// Row({space:10}) {
|
||||||
|
// Row() {
|
||||||
|
// TextInput({ placeholder: '我也说一句',text:this.commentContent })
|
||||||
|
// .fontSize(17)
|
||||||
|
// .backgroundColor(Color.White)
|
||||||
|
// .width('95%')
|
||||||
|
// .onChange((value: string) => {
|
||||||
|
// this.commentContent = value; // 实时更新临时内容[3](@ref)
|
||||||
|
// console.info('视频详情评论输入框内容:', this.commentContent);
|
||||||
|
// })
|
||||||
|
// }.borderRadius(5).borderWidth(1).borderColor('#333333').backgroundColor(Color.White).height(50).width('calc(100% - 100vp)')
|
||||||
|
// .margin({ left: 10,top: 10 })
|
||||||
|
//
|
||||||
|
// Button('发送')
|
||||||
|
// .borderRadius(5)
|
||||||
|
// .type(ButtonType.ROUNDED_RECTANGLE)
|
||||||
|
// .backgroundColor($r('app.color.main_color'))
|
||||||
|
// .fontColor(Color.White)
|
||||||
|
// .fontSize(17)
|
||||||
|
// .width(70).height(50)
|
||||||
|
// .margin({top:10})
|
||||||
|
// .onClick(()=>{
|
||||||
|
// this.addComment();
|
||||||
|
// })
|
||||||
|
// }.backgroundColor(Color.White).width('100%').height(100).justifyContent(FlexAlign.Start).alignItems(VerticalAlign.Top)
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// .justifyContent(FlexAlign.End)
|
||||||
|
// }
|
||||||
|
// .backgroundColor('#f4f4f4')
|
||||||
|
// .customTabbar('评论')
|
||||||
|
// }
|
||||||
|
// .divider( {
|
||||||
|
// strokeWidth: 1,
|
||||||
|
// color: $r('app.color.common_gray_border'),
|
||||||
|
// })
|
||||||
|
// .layoutWeight(1)
|
||||||
|
// .onChange((index: number) => {
|
||||||
|
// this.currentIndex = index;
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
getPlayerAreaHeight(): string | number {
|
||||||
|
if (this.isPortrait) {
|
||||||
|
return getDisplayWindowWidth().vp / 16 * 9
|
||||||
|
} else {
|
||||||
|
return '100%'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onBackPress(): boolean {
|
||||||
|
if (!PLVOrientationManager.getInstance().isPortrait.value) {
|
||||||
|
PLVOrientationManager.getInstance().requestOrientation('port');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
aboutToDisappear(): void {
|
||||||
|
this.onBackPressDisposable?.dispose()
|
||||||
|
runCatching(async () => {
|
||||||
|
const windowInstance = await window.getLastWindow(this.context)
|
||||||
|
windowInstance.setWindowKeepScreenOn(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
emitter.off(BasicConstant.notification_back_refreshData)
|
||||||
|
}
|
||||||
|
|
||||||
|
getVideoDetail(video_uuid:string) {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.clear();
|
||||||
|
hashMap.set('video_uuid', video_uuid)
|
||||||
|
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.videoDetail,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
logger.info('Response videoDetails'+video_uuid);
|
||||||
|
logger.info('Response videoDetail'+res);
|
||||||
|
let json:VideoDetailModel = JSON.parse(res+'') as VideoDetailModel;
|
||||||
|
this.note=json.video.note
|
||||||
|
this.readSeriesVideo(video_uuid)
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
readSeriesVideo(video_uuid:string) {
|
||||||
|
// const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
// hashMap.clear();
|
||||||
|
// hashMap.set('uuid', uuid)
|
||||||
|
|
||||||
|
hdHttp.post<string>(BasicConstant.read, {
|
||||||
|
user_uuid: authStore.getUser().uuid,
|
||||||
|
news_article_uuid:video_uuid,
|
||||||
|
type: '4',
|
||||||
|
} as readExtraData).then(async (res: HdResponse<string>) => {
|
||||||
|
|
||||||
|
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getCommentdata(video_uuid:string) {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.clear();
|
||||||
|
hashMap.set('uuid', video_uuid)
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.videoCommentListV2,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
logger.info('Response videoDetails commentList:'+video_uuid);
|
||||||
|
logger.info('Response videoDetail commentList:'+res);
|
||||||
|
let json:VideoCommentModel = JSON.parse(res+'') as VideoCommentModel;
|
||||||
|
if(json.data != null && json.data!) {
|
||||||
|
this.commentList = json.data;
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
addComment() {
|
||||||
|
inputMethod.getController().hideTextInput();//关闭键盘
|
||||||
|
if (this.commentContent.length == 0) {
|
||||||
|
promptAction.showToast({ message: '请输入评论内容', duration: 1000 })
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('article_uuid', this.params.video_uuid)
|
||||||
|
hashMap.set('comment', this.commentContent)
|
||||||
|
hashMap.set('type', '8')
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.addCommentV2,hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
logger.info('Response replyComment:'+res);
|
||||||
|
let json:CommentV2Model = JSON.parse(res+'') as CommentV2Model;
|
||||||
|
if(json.code == 200) {
|
||||||
|
promptAction.showToast({ message: '发表评论成功', duration: 1000 })
|
||||||
|
this.getCommentdata(this.params.video_uuid);
|
||||||
|
this.commentContent = '';
|
||||||
|
} else {
|
||||||
|
promptAction.showToast({ message: json.message, duration: 1000 })
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Extend(TabContent)
|
||||||
|
function customTabbar(name:string) {
|
||||||
|
.tabBar(SubTabBarStyle.of(name)
|
||||||
|
.labelStyle({ unselectedColor: '#848284', selectedColor:'#8D2316' , font: { size: 17 }})
|
||||||
|
.indicator({
|
||||||
|
color: '#8D2316', //下划线颜色
|
||||||
|
height: 1, //下划线高度
|
||||||
|
marginTop:16 //下划线与文字间距
|
||||||
|
}))
|
||||||
|
.height('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
interface VideoPageParam {
|
||||||
|
video_uuid:string
|
||||||
|
param:PLVMediaPlayerSingleVideoPageParam
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CommentV2Model{
|
||||||
|
code:number;
|
||||||
|
data:Object[];
|
||||||
|
message:string;
|
||||||
|
msg:string
|
||||||
|
}
|
||||||
|
interface readExtraData{
|
||||||
|
user_uuid:string,
|
||||||
|
news_article_uuid:string,
|
||||||
|
type:string,
|
||||||
|
}
|
||||||
@ -42,6 +42,8 @@
|
|||||||
"pages/Netease/PatientSimplyPage",
|
"pages/Netease/PatientSimplyPage",
|
||||||
"pages/Netease/MyOpinionPage",
|
"pages/Netease/MyOpinionPage",
|
||||||
"pages/PatientsPage/GroupManagementPage",
|
"pages/PatientsPage/GroupManagementPage",
|
||||||
"pages/WebView/WebPageSnapshot"
|
"pages/WebView/WebPageSnapshot",
|
||||||
|
"pages/VideoPage/PLVMediaPlayerOnlyVideoPage"
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||