患者相关
This commit is contained in:
parent
abbd0540ab
commit
67c2c35841
379
features/patient/src/main/ets/components/MassSendingComp.ets
Normal file
379
features/patient/src/main/ets/components/MassSendingComp.ets
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
import { BasicConstant, ChangeUtil,
|
||||||
|
EmptyViewComp,
|
||||||
|
hdHttp, HdLoadingDialog, HdNav, HdResponse, logger,TripleOptionDialog,
|
||||||
|
ViewImageInfo } from "@itcast/basic";
|
||||||
|
import { HashMap,JSON } from "@kit.ArkTS";
|
||||||
|
import { BusinessError } from "@kit.BasicServicesKit";
|
||||||
|
import { promptAction, router } from "@kit.ArkUI";
|
||||||
|
import { PullToRefreshLayout, RefreshController } from "refreshlib";
|
||||||
|
import { HMPopInfo, HMRouterMgr } from "@hadss/hmrouter";
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export struct MassSendingComp {
|
||||||
|
@State pageNumber: number = 1
|
||||||
|
@State totalPage: number = 1
|
||||||
|
scroller = new Scroller()
|
||||||
|
@State messageList: ApiItem[] = []
|
||||||
|
public controller: RefreshController = new RefreshController()
|
||||||
|
|
||||||
|
aboutToAppear(): void {
|
||||||
|
this.initGetGroupListAction()
|
||||||
|
}
|
||||||
|
|
||||||
|
initGetGroupListAction() {
|
||||||
|
this.pageNumber = 1
|
||||||
|
this.messageList = []
|
||||||
|
this.getGroupListAction()
|
||||||
|
}
|
||||||
|
|
||||||
|
dialogController: CustomDialogController = new CustomDialogController({
|
||||||
|
builder: TripleOptionDialog({ title: '温馨提示',subTitle:'',oneButtonTitle:'单独选择',twoButtonTitle:'分组选择',buttonSelected:(actionType:string)=>{
|
||||||
|
if (actionType == '单独选择') {
|
||||||
|
HMRouterMgr.push({pageUrl:'PatientsListComp',
|
||||||
|
param:{group_uuid:"",selectedPatients:[],pageName:"群发消息"}
|
||||||
|
},{
|
||||||
|
onResult:(popInfo:HMPopInfo)=>{
|
||||||
|
if (popInfo && popInfo.result && popInfo.result["isRefresh"] !== undefined) {
|
||||||
|
this.initGetGroupListAction()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
HMRouterMgr.push({pageUrl:'SelectedPatientGroupComp'
|
||||||
|
},{
|
||||||
|
onResult:(popInfo:HMPopInfo)=>{
|
||||||
|
if (popInfo && popInfo.result && popInfo.result["isRefresh"] !== undefined) {
|
||||||
|
this.initGetGroupListAction()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}}),
|
||||||
|
alignment: DialogAlignment.Center,
|
||||||
|
offset: { dx: 0, dy: 0 },
|
||||||
|
autoCancel: true
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog: CustomDialogController = new CustomDialogController({
|
||||||
|
builder: HdLoadingDialog({ message: '加载中...' }),
|
||||||
|
customStyle: true,
|
||||||
|
alignment: DialogAlignment.Center
|
||||||
|
})
|
||||||
|
|
||||||
|
getGroupListAction() {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('page', String(this.pageNumber));
|
||||||
|
this.dialog.open()
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.listGroupSendMsg, hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
logger.info('Response listGroupSendMsg' + res);
|
||||||
|
let json: Record<string, string> = JSON.parse(res + '') as Record<string, string>;
|
||||||
|
if (json.code == '200') {
|
||||||
|
this.controller.refreshSuccess();
|
||||||
|
this.controller.loadSuccess();
|
||||||
|
this.totalPage = json.data["pages"]
|
||||||
|
if (Array.isArray(json.data["list"])) {
|
||||||
|
this.messageList = [...this.messageList, ...json.data["list"]];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.error('群发消息列表失败:' + json.message)
|
||||||
|
promptAction.showToast({ message: String(json.message), duration: 1000 })
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteGroupMessage(uuid: string) {
|
||||||
|
const hashMap: HashMap<string, string> = new HashMap();
|
||||||
|
hashMap.set('uuid', uuid);
|
||||||
|
this.dialog.open()
|
||||||
|
hdHttp.httpReq<string>(BasicConstant.delGroupSendMsg, hashMap).then(async (res: HdResponse<string>) => {
|
||||||
|
this.dialog.close();
|
||||||
|
logger.info('Response listGroupSendMsg' + res);
|
||||||
|
let json: Record<string, string> = JSON.parse(res + '') as Record<string, string>;
|
||||||
|
if (json.code == '200') {
|
||||||
|
promptAction.showToast({ message: '删除成功', duration: 1000 })
|
||||||
|
this.messageList = this.messageList.filter(item => item.uuid !== uuid);
|
||||||
|
} else {
|
||||||
|
console.error('删除群发消息失败:' + json.message)
|
||||||
|
promptAction.showToast({ message: String(json.message), duration: 1000 })
|
||||||
|
}
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
this.dialog.close();
|
||||||
|
this.controller.refreshError();
|
||||||
|
console.info(`Response fails: ${err}`);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
Column() {
|
||||||
|
HdNav({
|
||||||
|
showLeftIcon: true,
|
||||||
|
title: '群发消息',
|
||||||
|
showRightText: false,
|
||||||
|
showRightIcon: false,
|
||||||
|
isLeftAction: true,
|
||||||
|
leftItemAction: () => {
|
||||||
|
router.back()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
PullToRefreshLayout({
|
||||||
|
scroller: this.scroller,
|
||||||
|
viewKey: "MessageGroupList",
|
||||||
|
controller: this.controller,
|
||||||
|
contentView: () => {
|
||||||
|
this.contentView()
|
||||||
|
},
|
||||||
|
onRefresh: () => {
|
||||||
|
this.pageNumber = 1
|
||||||
|
this.messageList = []
|
||||||
|
this.getGroupListAction()
|
||||||
|
},
|
||||||
|
onCanPullRefresh: () => {
|
||||||
|
if (!this.scroller.currentOffset()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return this.scroller.currentOffset().yOffset <= 0
|
||||||
|
},
|
||||||
|
onCanPullLoad: () => {
|
||||||
|
if (this.pageNumber >= this.totalPage) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad: () => {
|
||||||
|
this.pageNumber++;
|
||||||
|
this.getGroupListAction()
|
||||||
|
}
|
||||||
|
}).width('100%').height('calc(100% - 176vp)').clip(true)
|
||||||
|
|
||||||
|
Text('群发消息')
|
||||||
|
.width('100%')
|
||||||
|
.height(50)
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor(Color.White)
|
||||||
|
.textAlign(TextAlign.Center)
|
||||||
|
.backgroundColor('rgba(63,199,193,1)')
|
||||||
|
.margin({ bottom: 20 })
|
||||||
|
.onClick(() => this.dialogController.open())
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
contentView() {
|
||||||
|
List({ scroller: this.scroller }) {
|
||||||
|
ForEach(this.messageList, (item: ApiItem) => {
|
||||||
|
ListItem() {
|
||||||
|
Column() {
|
||||||
|
Text(String(item.msg_send_date))
|
||||||
|
.height(45)
|
||||||
|
.fontSize(18)
|
||||||
|
.fontColor('#333333')
|
||||||
|
Column() {
|
||||||
|
Blank()
|
||||||
|
.width('100%')
|
||||||
|
.height(3)
|
||||||
|
.backgroundColor($r('app.color.main_color'))
|
||||||
|
Row() {
|
||||||
|
Column() {
|
||||||
|
Text(this.safeGetNameCount(item.realname).toString() + '位患者')
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor('rgba(51,51,51,1)')
|
||||||
|
.margin({ left: 10,top:10, right: 50 })
|
||||||
|
.height(30)
|
||||||
|
Text(String(item.realname))
|
||||||
|
.fontSize(14)
|
||||||
|
.fontColor('rgba(102,102,102,1)')
|
||||||
|
.width('100%')
|
||||||
|
.margin({ left: 10, right: 50 })
|
||||||
|
}.width('100%').alignItems(HorizontalAlign.Start).justifyContent(FlexAlign.Start).layoutWeight(1)
|
||||||
|
|
||||||
|
Image($r('app.media.message_sendgroup_delete'))
|
||||||
|
.width(35)
|
||||||
|
.height(35)
|
||||||
|
.onClick(() => this.deleteGroupMessage(item.uuid))
|
||||||
|
}.width('100%').alignItems(VerticalAlign.Top).justifyContent(FlexAlign.Start)
|
||||||
|
|
||||||
|
this.lineView()
|
||||||
|
Column() {
|
||||||
|
if (item.msg_type == 1) {
|
||||||
|
Text(String(item.msg_content))
|
||||||
|
.fontSize(16)
|
||||||
|
.fontColor('#333333')
|
||||||
|
.width('100%')
|
||||||
|
.padding(10)
|
||||||
|
} else if (item.msg_type == 2) {
|
||||||
|
Image(BasicConstant.urlImage + String(item.msg_content))
|
||||||
|
.width(100)
|
||||||
|
.height(100)
|
||||||
|
.alt($r('app.media.home_scroll_default1'))
|
||||||
|
.objectFit(ImageFit.Cover)
|
||||||
|
.padding(10)
|
||||||
|
.onClick(()=>{
|
||||||
|
router.pushUrl({
|
||||||
|
url: 'pages/Netease/PreviewPhotoPage',
|
||||||
|
params: { previewIndex:0 ,imgList:[{url:String(item.msg_content)}] as ViewImageInfo[],downLoad:false}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.customMessage(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.margin({ left: 10, right: 10 })
|
||||||
|
}
|
||||||
|
.margin({ left: 10, right: 10 })
|
||||||
|
.backgroundColor(Color.White)
|
||||||
|
.borderRadius(5)
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Blank()
|
||||||
|
.layoutWeight(1)
|
||||||
|
Text('再发一条')
|
||||||
|
.fontSize(12)
|
||||||
|
.fontColor($r('app.color.main_color'))
|
||||||
|
.borderRadius(10)
|
||||||
|
.borderWidth(1)
|
||||||
|
.borderColor($r('app.color.main_color'))
|
||||||
|
.width(65)
|
||||||
|
.height(20)
|
||||||
|
.textAlign(TextAlign.Center)
|
||||||
|
.margin({ right: 20, top: 10, bottom: 10 })
|
||||||
|
.onClick(()=>{
|
||||||
|
HMRouterMgr.push({pageUrl:'SendGroupMessageComp',param:{'realname':item.realname,'patient_uuid':item.patient_uuid}},{
|
||||||
|
onResult:(popInfo:HMPopInfo)=>{
|
||||||
|
if (popInfo && popInfo.result && popInfo.result["isPop"] !== undefined) {
|
||||||
|
this.initGetGroupListAction()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.backgroundColor('#f4f4f4')
|
||||||
|
.width('100%')
|
||||||
|
.scrollBar(BarState.Off)
|
||||||
|
.layoutWeight(1)
|
||||||
|
|
||||||
|
EmptyViewComp({promptText:'暂无随访计划',isVisibility:true})
|
||||||
|
.width('100%')
|
||||||
|
.height('100%')
|
||||||
|
.visibility(this.messageList.length>0?Visibility.None:Visibility.Visible)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
lineView() {
|
||||||
|
Row() {
|
||||||
|
Blank()
|
||||||
|
.width(10)
|
||||||
|
.height(10)
|
||||||
|
.borderRadius(5)
|
||||||
|
.backgroundColor('rgba(228,228,228,1)')
|
||||||
|
.margin({ left: -1 })
|
||||||
|
Blank()
|
||||||
|
.width('95%')
|
||||||
|
.height(1)
|
||||||
|
.backgroundColor('rgba(228,228,228,1)')
|
||||||
|
Blank()
|
||||||
|
.width(10)
|
||||||
|
.height(10)
|
||||||
|
.borderRadius(5)
|
||||||
|
.backgroundColor('rgba(228,228,228,1)')
|
||||||
|
}
|
||||||
|
.width('100%')
|
||||||
|
.height(10)
|
||||||
|
.margin({ top: 10 })
|
||||||
|
}
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
customMessage(item: ApiItem) {
|
||||||
|
Column() {
|
||||||
|
Text(String(item.msg_type) == '4' ? this.parseMsgContent(item.msg_content).name :
|
||||||
|
this.parseMsgContent(item.msg_content).topic)
|
||||||
|
.fontSize(14)
|
||||||
|
.maxLines(2)
|
||||||
|
.margin({ left: 10, top: 10, right: 10 })
|
||||||
|
|
||||||
|
Row() {
|
||||||
|
Text(String(item.msg_type) == '5' || String(item.msg_type) == '6' || String(item.msg_type) == '7' ||
|
||||||
|
String(item.msg_type) == '8' ? this.parseMsgContent(item.msg_content).path :
|
||||||
|
BasicConstant.urlImage + this.parseMsgContent(item.msg_content).path)
|
||||||
|
.fontSize(12)
|
||||||
|
.width('60%')
|
||||||
|
.maxLines(3)
|
||||||
|
.fontColor('rgba(127,127,127,1)')
|
||||||
|
.margin({ left: 10, top: 10, bottom: 10 })
|
||||||
|
.layoutWeight(1)
|
||||||
|
Image(String(item.msg_type) == '7' || String(item.msg_type) == '8' ?
|
||||||
|
this.parseMsgContent(item.msg_content).imgPath :
|
||||||
|
BasicConstant.urlImage + this.parseMsgContent(item.msg_content).imgPath)
|
||||||
|
.alt($r('app.media.userPhoto_default'))
|
||||||
|
.objectFit(ImageFit.Fill)
|
||||||
|
.width(50)
|
||||||
|
.height(50)
|
||||||
|
.margin({ right: 10, bottom: 10 })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.width('70%')
|
||||||
|
.borderWidth(0.5)
|
||||||
|
.borderRadius(5)
|
||||||
|
.borderColor('#999999')
|
||||||
|
.margin({ top: 15, bottom: 15 })
|
||||||
|
.alignItems(HorizontalAlign.Start)
|
||||||
|
.justifyContent(FlexAlign.Start)
|
||||||
|
.onClick(()=>{
|
||||||
|
router.pushUrl({
|
||||||
|
url: 'pages/WebView/WebPage',
|
||||||
|
params: {'title':String(item.msg_type) == '4' || String(item.msg_type) == '3'?'患教详情':String(item.msg_type) == '5'?'出/停诊公告':'消息详情','url':String(item.msg_type) == '5' || String(item.msg_type) == '6' || String(item.msg_type) == '7' ||
|
||||||
|
String(item.msg_type) == '8' ? this.parseMsgContent(item.msg_content).path :
|
||||||
|
BasicConstant.urlImage + this.parseMsgContent(item.msg_content).path}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
safeGetNameCount(realname: string | string[]): number {
|
||||||
|
if (Array.isArray(realname)) {
|
||||||
|
return realname.length;
|
||||||
|
} else if (typeof realname === 'string') {
|
||||||
|
return realname.split(',').filter(name => name.trim() !== '').length;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
parseMsgContent(content: string): CardMsg {
|
||||||
|
// try {
|
||||||
|
return JSON.parse(content) as CardMsg
|
||||||
|
// } catch (e) {
|
||||||
|
// console.error("JSON 解析失败", e);
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ApiItem {
|
||||||
|
uuid: string
|
||||||
|
realname: string | string[]
|
||||||
|
msg_content: string
|
||||||
|
msg_type: number
|
||||||
|
patient_uuid:string
|
||||||
|
msg_send_date:string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CardMsg {
|
||||||
|
path: string
|
||||||
|
imgPath: string
|
||||||
|
topic: string
|
||||||
|
uuid: string
|
||||||
|
name:string
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user