diff --git a/chatkit_ui/src/main/ets/view/MessageComponent.ets b/chatkit_ui/src/main/ets/view/MessageComponent.ets index 792fc81..ebb3e3c 100644 --- a/chatkit_ui/src/main/ets/view/MessageComponent.ets +++ b/chatkit_ui/src/main/ets/view/MessageComponent.ets @@ -243,8 +243,7 @@ export struct SenderMessageComponent { }.alignItems(HorizontalAlign.End).margin({ left: 8 }).width('75%') CommonAvatar({ - item: new AvatarItem(this.chatUserInfo != null ? - this.chatUserInfo?.getCurrentUserAvatarUrl() : BasicConstant.urlHtml+authStore.getUser().photo, + item: new AvatarItem( BasicConstant.urlHtml+authStore.getUser().photo, this.chatUserInfo?.getCurrentUserAvatarName() ?? '', AvatarColorUntil.getBackgroundColorById(this.message.message.senderId), ), diff --git a/common/src/main/ets/view/CommonAvatar.ets b/common/src/main/ets/view/CommonAvatar.ets index a5d7309..b9279d0 100644 --- a/common/src/main/ets/view/CommonAvatar.ets +++ b/common/src/main/ets/view/CommonAvatar.ets @@ -29,7 +29,8 @@ export struct CommonAvatar { if (this.item != null) { if (this.item.avatarUrl == null || this.item.avatarUrl.toString().length <= 0) { - Image(BasicConstant.urlHtml+authStore.getUser().photo) + // Image(BasicConstant.urlHtml+authStore.getUser().photo) + Image($r('app.media.icon_touxiang_persion_new')) .onError(() => { if(this.item!=null) { @@ -88,7 +89,7 @@ export struct CommonAvatar { export function buildAvatar(item: AvatarItem, width: Length, height: Length, borderRadius?: Length | null) { Stack() { - if (item.avatarUrl == null || item.avatarUrl.toString().length <= 0) { + if (item.avatarUrl == null || item.avatarUrl.toString().length <= 0||item.avatarUrl=='') { Column() { }.width('100%').height('100%').backgroundColor(item.color) diff --git a/commons/basic/Index.ets b/commons/basic/Index.ets index 3ce6316..40dec70 100644 --- a/commons/basic/Index.ets +++ b/commons/basic/Index.ets @@ -89,4 +89,6 @@ export { InputPopWindow } from './src/main/ets/Views/InputPopWindow' export { ChatExtModel,ChatParam } from './src/main/ets/models/ChatExtModel' -export { PatientListModel,PatientsData } from './src/main/ets/models/PatientListModel' \ No newline at end of file +export { PatientListModel,PatientsData } from './src/main/ets/models/PatientListModel' + +export { applyListCallBacl, applyListModel, applyHistoryCallBacl , historyObjectModel, historyModel } from './src/main/ets/models/ApplyModel' \ No newline at end of file diff --git a/commons/basic/src/main/ets/Views/PreviewPhotos.ets b/commons/basic/src/main/ets/Views/PreviewPhotos.ets index c1df5e5..5dd6fe1 100644 --- a/commons/basic/src/main/ets/Views/PreviewPhotos.ets +++ b/commons/basic/src/main/ets/Views/PreviewPhotos.ets @@ -147,6 +147,7 @@ export struct PreviewPhotos { } + .index(this.previewIndex) .indicator(false) .loop(false) // 禁用循环滑动 .onChange((index: number) => { diff --git a/commons/basic/src/main/ets/components/ChangePhotoGrids.ets b/commons/basic/src/main/ets/components/ChangePhotoGrids.ets index a32abd9..bf3ebea 100644 --- a/commons/basic/src/main/ets/components/ChangePhotoGrids.ets +++ b/commons/basic/src/main/ets/components/ChangePhotoGrids.ets @@ -41,9 +41,9 @@ export struct ChangePhotoGrids { .width(20).height(20) .position({ x: 55, y: 5 }) .onClick(() => { - - this.removeImg=!this.removeImg this.removeIndex=index + this.removeImg=!this.removeImg + }) } diff --git a/commons/basic/src/main/ets/models/ApplyModel.ets b/commons/basic/src/main/ets/models/ApplyModel.ets new file mode 100644 index 0000000..44ce5ce --- /dev/null +++ b/commons/basic/src/main/ets/models/ApplyModel.ets @@ -0,0 +1,56 @@ +export interface applyListCallBacl { + code:number, + msg:string, + data:applyListModel[], + message:string, +} + +export interface applyHistoryCallBacl { + code:number, + msg:string, + data:historyObjectModel, + message:string, +} + +export class applyListModel { + mobile?:string; + photo?:string; + birthDate?:string; + sex?:number; + realName?:string; + checkDate?:string; + uuid?:string; + createDate?:string; + patientUuid?:string; + expertUuid?:string; + status?:number; + content?:string; + nationName?:string; + provName?:string; + cityName?:string; + countyName?:string; + nation?:string; + note?:string + nickname?:string + groupType?:string + groupUuid?:string +} + +export interface historyObjectModel { + list:historyModel[]; + isFirstPage?:string; + isLastPage?:string; + pageNum?:string; + pages?:string; + pageSize?:string; + total?:string; +} + +export class historyModel { + status?:string;//审核状态(1.待审核2.审核通过3.拒绝4.已过期 5.患者取消 6专家解除) + patient_photo?:string; + create_date?:string; + content?:string; + nickname?:string; + patient_name?:string; +} \ No newline at end of file diff --git a/commons/basic/src/main/ets/utils/ChangeUtil.ets b/commons/basic/src/main/ets/utils/ChangeUtil.ets index 119324d..160645e 100644 --- a/commons/basic/src/main/ets/utils/ChangeUtil.ets +++ b/commons/basic/src/main/ets/utils/ChangeUtil.ets @@ -233,5 +233,15 @@ export class ChangeUtil { } return ""; } - + //将第一位移动到最后一位 + static moveFirstToEnd(arr: string[]): string[] { + if (arr.length <= 1) return arr; + const first = arr[0]; + // 前移后续元素(从索引1开始) + for (let i = 1; i < arr.length; i++) { + arr[i - 1] = arr[i]; + } + arr[arr.length - 1] = first; // 首位移至末尾 + return arr; + } } \ No newline at end of file diff --git a/commons/basic/src/main/ets/utils/PreferenceStore.ets b/commons/basic/src/main/ets/utils/PreferenceStore.ets index 4710ec2..25e8c20 100644 --- a/commons/basic/src/main/ets/utils/PreferenceStore.ets +++ b/commons/basic/src/main/ets/utils/PreferenceStore.ets @@ -14,6 +14,10 @@ class PreferenceStore { this.getStore().putSync(keyword, value) this.getStore().flush() } + setItemNumber(keyword: string,value:number) { + this.getStore().putSync(keyword, value) + this.getStore().flush() + } setItemBoolean(keyword: string,value:boolean) { this.getStore().putSync(keyword, value) this.getStore().flush() @@ -25,6 +29,9 @@ class PreferenceStore { getItemString(keyword: string) { return this.getStore().getSync(keyword,'') as string } + getItemNumber(keyword: string) { + return this.getStore().getSync(keyword,0) as number + } getItemBooleanT(keyword: string):boolean { return this.getStore().getSync(keyword,true) as boolean } diff --git a/commons/basic/src/main/resources/base/media/close.png b/commons/basic/src/main/resources/base/media/close.png new file mode 100644 index 0000000..d6596f7 Binary files /dev/null and b/commons/basic/src/main/resources/base/media/close.png differ diff --git a/commons/basic/src/main/resources/base/media/patientgif.png b/commons/basic/src/main/resources/base/media/patientgif.png new file mode 100644 index 0000000..51373af Binary files /dev/null and b/commons/basic/src/main/resources/base/media/patientgif.png differ diff --git a/features/netease/src/main/ets/view/MyOpinionComp.ets b/features/netease/src/main/ets/view/MyOpinionComp.ets index 5f9affe..1ea84ad 100644 --- a/features/netease/src/main/ets/view/MyOpinionComp.ets +++ b/features/netease/src/main/ets/view/MyOpinionComp.ets @@ -16,6 +16,7 @@ export struct MyOpinionComp { @State photos: string[] = [] @State previewIndex: number = -1 @State maxSelectNumber: number = 6 + private photoSheetDialog!: CustomDialogController; @State @Watch('onRemoveImg') @@ -36,7 +37,8 @@ export struct MyOpinionComp { onRemoveImg() { this.photos.splice(this.removeIndex, 1) - this.maxSelectNumber = this.maxSelectNumber - this.photos.length; + this.maxSelectNumber =6- this.photos.length; + let a= this.maxSelectNumber } private custom!:CustomDialogController; dialog: CustomDialogController = new CustomDialogController({ @@ -89,8 +91,7 @@ export struct MyOpinionComp { } this.photos.push(...selectedUris); - this.maxSelectNumber = this.maxSelectNumber - this.photos.length; - + this.maxSelectNumber = 6- this.photos.length; } @@ -112,7 +113,7 @@ export struct MyOpinionComp { if(this.params.myAnswer.imgs!=null) { this.photos.push(...this.changeToImgs(this.params.myAnswer.imgs.split(","))) - this.maxSelectNumber = this.maxSelectNumber - this.photos.length; + this.maxSelectNumber = 6- this.photos.length; } } diff --git a/features/netease/src/main/ets/view/PatientListComp.ets b/features/netease/src/main/ets/view/PatientListComp.ets index 04bae12..c9db3db 100644 --- a/features/netease/src/main/ets/view/PatientListComp.ets +++ b/features/netease/src/main/ets/view/PatientListComp.ets @@ -1,11 +1,19 @@ -import { authStore, BasicConstant, hdHttp, HdLoadingDialog,HdNav, HdResponse, patientDbManager, +import { + applyListCallBacl, + applyListModel, + authStore, BasicConstant, + ChangeUtil, + hdHttp, HdLoadingDialog,HdNav, HdResponse, patientDbManager, PatientListModel, - PatientsData} from '@itcast/basic' + PatientsData, + preferenceStore} 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'; +import { BusinessError } from '@kit.BasicServicesKit'; + let collator = new Intl.Collator(I18n.System.getSystemLocale(), { usage: 'sort', collation: 'pinyin', @@ -22,18 +30,51 @@ export struct PatientListComp { 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#'] private indexUtil = I18n.getInstance(I18n.System.getSystemLocale()); - + displayClass = display.getDefaultDisplaySync() @State alphabetSelected: number = 0 dialog: CustomDialogController = new CustomDialogController({ builder: HdLoadingDialog({ message: '加载中...' }), customStyle: true, alignment: DialogAlignment.Center }) - + @State count: number = 0 + @State total: number = 0 + @State old:number=preferenceStore.getItemNumber('old_patient_num') + @State applyArray:applyListModel[] = []; + @State needShow:boolean=false aboutToAppear() { this. PatientsData() this.loadPatients() + this.getApplyList() + } + getApplyList() { + this.dialog.open() + hdHttp.post(BasicConstant.applyList, { + expertUuid: authStore.getUser().uuid, + } as updateExtraData).then(async (res: HdResponse) => { + this.dialog.close(); + let json:applyListCallBacl = JSON.parse(res+'') as applyListCallBacl; + if(json.code == 1) { + this.applyArray = json.data; + if( this.applyArray!=null) + { + this.applyArray.forEach( item=>{ + if(1==item.status) + { + this.count++ + } + }) + } + + } else { + + } + }).catch((err: BusinessError) => { + this.dialog.close(); + + console.info(`Response fails: ${err}`); + }) } PatientsData() @@ -47,7 +88,32 @@ export struct PatientListComp { console.log('服务器返回的患者数据:', json); if(json.data!=null) { - this.collationData(json.data); + // let regionRequestData: PatientsData[]=[...json.data] + // regionRequestData =[...json.data] + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // regionRequestData.push(...json.data) + // this.collationData(regionRequestData); + if(json.data!=null&&json.data.length>0) + { + this.total=json.data.length + if(this.old0?Visibility.Visible:Visibility.Hidden) }.layoutWeight(1) + .align(Alignment.Start) Column() @@ -136,7 +201,7 @@ export struct PatientListComp { .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%') + } @@ -162,7 +227,7 @@ export struct PatientListComp { .maxLines(1) .textOverflow({ overflow: TextOverflow.Ellipsis }) .ellipsisMode(EllipsisMode.END) - Text('(随访'+'人)') + Text('(随访'+this.total+'人)') .fontSize(16) .fontColor(Color.Red) .layoutWeight(1) @@ -171,7 +236,7 @@ export struct PatientListComp { .maxLines(1) .textOverflow({ overflow: TextOverflow.Ellipsis }) .ellipsisMode(EllipsisMode.END) - + .visibility(this.total>0?Visibility.Visible:Visibility.Hidden) }.layoutWeight(1) .align(Alignment.Start) @@ -197,101 +262,76 @@ export struct PatientListComp { 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) + Column() + { + Row() { + Image(BasicConstant.urlHtml+regionData.photo) + .alt($r('app.media.userPhoto_default')) + .width(50) + .height(50) .margin({ left:10 }) - .alignSelf(ItemAlign.End) + .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) - 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) + }.layoutWeight(1) + .align(Alignment.Start) - }.align(Alignment.End).padding({right:30}) + 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%') + Text().height(1).width('100%').backgroundColor( $r('sys.color.ohos_id_color_panel_bg')) } - .alignItems(VerticalAlign.Center) - .padding({ top:10,bottom:10}) - .width('100%') - } + + } + // .height(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%') @@ -300,21 +340,30 @@ export struct PatientListComp { } .sticky(StickyStyle.None) + .divider({ + strokeWidth: 1, + color: $r('sys.color.ohos_id_color_panel_bg'), + startMargin: 0, + endMargin: 0 + }) .onScrollIndex((start: number, end: number) => { + if(start<3) + { + start=0 + } + else + { + start=start-2 + } 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 @@ -329,26 +378,17 @@ export struct PatientListComp { 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.searchIndex(this.indexList, currentWord) - pos = this.onClickPointIndex(this.indexList, beforeWord, afterWord) - } else { - pos = this.searchIndex(this.indexList, currentWord) - } if (pos === -1) { return; } - this.scroller.scrollToIndex(pos); + this.scroller.scrollToIndex(pos+2); }) .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' }) @@ -356,13 +396,27 @@ export struct PatientListComp { size: '20vp', style: FontStyle.Normal, weight: FontWeight.Bolder }) + .position({ x: this.displayClass.width / this.displayClass.densityPixels - 25 }) // 侧边栏位置 + + Column() + { + Image($r('app.media.close')).width(40).height(40).margin({right:50,top:60}) + .position({x:this.displayClass.width / this.displayClass.densityPixels-50,y:60}) + .onClick(()=>{ + this.needShow=false + }) } + .visibility(this.needShow?Visibility.Visible:Visibility.None) + .width('100%') .height('100%') - .backgroundColor(Color.Transparent) + .backgroundImageSize(ImageSize.Contain) + .backgroundImagePosition(Alignment.Center) + .backgroundImage($r('app.media.patientgif')) + .backgroundColor('#44444444') } .layoutWeight(1) - + .width('100%') }.width('100%') .height('100%') @@ -388,17 +442,21 @@ export struct PatientListComp { this.regionDataGroupsList = []; this.regionInfo.forEach((value: PatientsData) => { let index = this.indexUtil.getIndex(value.nickname); + if(!ChangeUtil.isLetter(index)) + { + index='#' + } if (this.indexList.indexOf(index) === -1) { let regionDataGroups: Groups = new Groups(); - if(this.normalIndexValue.includes(index)) - { + // if(this.normalIndexValue.includes(index)) + // { regionDataGroups.title = index; - } - else - { - regionDataGroups.title = '#'; - } + // } + // else + // { + // regionDataGroups.title = '#'; + // } this.indexList.push(index); regionDataGroups.regionDataList.push(value); @@ -408,6 +466,10 @@ export struct PatientListComp { } }) + if( this.indexList.length>0&&!ChangeUtil.isLetter(this.indexList[0])) + { + ChangeUtil.moveFirstToEnd(this.indexList) + } this.regionDataGroupsList.sort((a, b) => { return this.normalIndexValue.indexOf(a.title) - this.normalIndexValue.indexOf(b.title); }); @@ -420,15 +482,7 @@ export struct PatientListComp { } 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) { + if (indexList[i] > target ) { return i; } }