出诊计划

This commit is contained in:
XiuYun CHEN 2025-07-25 13:23:43 +08:00
parent 75277f5bb5
commit 85d23c1504
27 changed files with 2422 additions and 24 deletions

View File

@ -95,6 +95,14 @@ export class BasicConstant {
static readonly patientVideoType= BasicConstant.urlExpertApp +"patientVideoType";// 患者视频类型列表
static readonly patientVideoByName= BasicConstant.urlExpertApp +"patientVideoByName";//患教视频科普分享
static readonly patientListByGBK= BasicConstant.urlExpertApp +"patientListByGBK";// 我的患者列表
static readonly deleteStopOutPatient= BasicConstant.urlExpertApp +"deleteStopOutPatient";// 删除停诊
static readonly mailanNoticeGet= BasicConstant.urlExpertAPI+ "mailanNoticeGet";//获取患教公告
static readonly mailanNoticeUpate= BasicConstant.urlExpertAPI+"mailanNoticeUpate";//修改患教公告
static readonly mailanNoticeAdd= BasicConstant.urlExpertAPI+"mailanNoticeAdd";//添加患教公告
static readonly addOutPatientA= BasicConstant.urlExpertApp+"addOutPatientA";//添加门诊安排
static readonly addStopOutPatient= BasicConstant.urlExpertApp+"addStopOutPatient";//添加停诊安排
static readonly deleteOutPatient= BasicConstant.urlExpertApp+"deleteOutPatient";//删除门诊安排
static readonly listWorkPlace= BasicConstant.urlExpertApp+"listWorkPlace";//执业地点-列表
static readonly province=['全国','北京市','天津市','河北省','山西省'
,'内蒙古自治区','辽宁省','吉林省','黑龙江省','上海市','江苏省','浙江省'
,'安徽省','福建省','江西省','山东省','河南省','湖北省','湖南省','广东省',

View File

@ -21,6 +21,29 @@ export class TimestampUtil {
return result;
}
static getTodayChinese()
{
// 获取今天日期字符串 yyyy-MM-dd
let today = new Date();
let yyyy = today.getFullYear();
let mm = (today.getMonth() + 1).toString().padStart(2, '0');
let dd = today.getDate().toString().padStart(2, '0');
let todayStr = `${yyyy}年${mm}月${dd}日`;
return todayStr
}
static getToday()
{
// 获取今天日期字符串 yyyy-MM-dd
let today = new Date();
let yyyy = today.getFullYear();
let mm = (today.getMonth() + 1).toString().padStart(2, '0');
let dd = today.getDate().toString().padStart(2, '0');
let todayStr = `${yyyy}-${mm}-${dd}`;
return todayStr
}
static isToday(dateStr: string): boolean {
try {
// 1. 解析目标日期字符串 → Date对象

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -28,7 +28,7 @@ export struct OneSection {
new MyPageSectionClass('twoItem', $r('app.media.my_page_patientList'), '患者分组', 'pages/PatientsPage/PatientsGroupPage',false),
new MyPageSectionClass('threeItem', $r('app.media.my_page_message'), '群发消息', '/pages/MyHomePage',false),
new MyPageSectionClass('fourItem', $r('app.media.my_page_QrCode'), '随访二维码', 'pages/WebView/WebPage',false),
new MyPageSectionClass('fiveItem', $r('app.media.my_page_visitPlan'), '出诊计划', '/pages/MyHomePage',false)
new MyPageSectionClass('fiveItem', $r('app.media.my_page_visitPlan'), '出诊计划', 'pages/Netease/OutpatientPage',false)
];
private getPagedItems(): Array<Array<MyPageSectionClass>> {

View File

@ -15,3 +15,5 @@ export { InterrogationDetailComp } from './src/main/ets/view/InterrogationDetail
export { PatientSimplyComp } from './src/main/ets/view/PatientSimplyComp'
export { MyOpinionComp } from './src/main/ets/view/MyOpinionComp'
export { OutpatientComp } from './src/main/ets/view/OutpatientComp'

View File

@ -0,0 +1,236 @@
import { HMRouterMgr } from '@hadss/hmrouter';
import { BasicConstant, TimestampUtil } from '@itcast/basic';
import { formatDate } from '@itcast/basic/src/main/ets/utils/DateUtils';
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
import { LengthMetrics, router } from '@kit.ArkUI'
import { StringIsEmpty } from '@nimkit/common';
import { ListOut } from '../model/ListOutPatientModel';
@Preview
@Component
export struct ItemCompArrange {
@Prop item:ListOut;
@State week:string=''
@State outpatientType:string=''
@State daytime:string=''
@Link deleteUuid:string
@Link delete: boolean
deleteCallBack: (uuid:string) => void = () => {};
@State lineHeight:Length=10;
aboutToAppear(): void {
this.initDialog()
this.getWeek()
this. getoutpatientType()
this.getdayTime()
}
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)=>{
this.deleteUuid=this.item.uuid
this.delete=!this.delete
}
}),
keyboardAvoidDistance: LengthMetrics.vp(0), // 设置弹窗底部与键盘顶部间距单位vp
alignment: DialogAlignment.Center,
customStyle: true,
autoCancel: false,
backgroundColor: ('rgba(0,0,0,0.5)'),
height: '100%'
})
}
build() {
Column()
{
Row()
{
Column() {
Text(this.week)
.fontColor($r('app.color.top_title'))
.fontSize(15)
.width(100)
.textAlign(TextAlign.Center)
Text(this.daytime)
.width(100)
.fontColor($r('app.color.common_gray_03')).padding({ top: 10 })
.fontSize(15)
.textAlign(TextAlign.Center)
}
.width(100)
.backgroundColor(Color.White)
.borderRadius({
topLeft: 4,
topRight: 0,
bottomRight: 0,
bottomLeft: 4
})
.justifyContent(FlexAlign.Center) // 垂直居中
.alignItems(HorizontalAlign.Center) // 子组件水平居中
.height(this.lineHeight)
Column() {
Text(this.item.hospital_name)
.fontColor($r('app.color.common_gray_01'))
.fontSize(18)
.margin({top:10})
Text(this.item.office_name)
.fontColor($r('app.color.common_gray_03'))
.fontSize(14)
.margin({top:10})
Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap, space: { cross: LengthMetrics.vp(10) } })
{
Text(this.item.location) .fontColor($r('app.color.common_gray_03')).fontSize(14).maxLines(1).textOverflow({ overflow: TextOverflow.Ellipsis })
.ellipsisMode(EllipsisMode.END)
.padding({right:3})
Text(this.outpatientType)
.fontSize(12)
.borderColor($r('app.color.top_title'))
.fontColor($r('app.color.top_title'))
.borderRadius(8)
.borderWidth(1)
.padding({ left: 4,right:4,top:2,bottom:2 })
}
.margin({top:10})
}
.padding({left:10,right:10,bottom:10})
.alignItems(HorizontalAlign.Start)
.layoutWeight(1)
.borderRadius({
topLeft: 0,
topRight: 4,
bottomRight: 0,
bottomLeft: 4
})
.margin({left:2})
.backgroundColor(Color.White)
.onAreaChange((oldVal, newVal) => {
this.lineHeight = newVal.height
})
}
.width('95%')
// .padding(10)
.alignSelf(ItemAlign.Center)
// .backgroundColor(Color.White)
.borderRadius(4)
.margin({left:10,right:10})
Row()
{
Blank()
Row()
{
Image($r('app.media.edit_icon')).width(15).height(15).margin({right:5})
Text('编辑')
.fontColor($r('app.color.common_gray_01'))
.fontSize(14)
}
.margin({right:30})
Row()
{
Image($r('app.media.delete_icon')).width(15).height(15).margin({right:5})
Text('删除')
.fontColor($r('app.color.common_gray_01'))
.fontSize(14)
}
.onClick(()=>{
this.dialog.open()
})
}.width('95%')
.padding(10)
.backgroundColor(Color.White)
.margin({top:2})
.borderRadius(4)
}
}
getWeek() {
switch (this.item.week) {
case 1:
this.week = '周一'
break
case 2:
this.week = '周二'
break
case 3:
this.week = '周三'
break
case 4:
this.week = '周四'
break
case 5:
this.week = '周五'
break
case 6:
this.week = '周六'
break
case 7:
this.week = '周日'
break
}
}
getoutpatientType()
{
switch (this.item.type)
{
case 1:
this.outpatientType='普通门诊'
break
case 2:
this.outpatientType='专家门诊'
break
case 3:
this.outpatientType='特需门诊'
break
case 4:
this.outpatientType='专科/专病门诊'
break
}
}
getdayTime()
{
switch (this.item.day)
{
case "a":
this.daytime='上午'
break
case "b":
this.daytime='下午'
break
case "c":
this.daytime='晚上'
break
case "d":
this.daytime='全天'
break
}
}
}

View File

@ -0,0 +1,175 @@
import { HMRouterMgr } from '@hadss/hmrouter';
import { BasicConstant, TimestampUtil } from '@itcast/basic';
import { formatDate } from '@itcast/basic/src/main/ets/utils/DateUtils';
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
import { LengthMetrics, router } from '@kit.ArkUI'
import { StringIsEmpty } from '@nimkit/common';
import { StopOutPatientList } from '../model/StopOutPatientListModel';
@Preview
@Component
export struct ItemCompStop {
@Prop item:StopOutPatientList;
@State reason:string=''
@Link deleteUuid:string
@Link delete: boolean
deleteCallBack: (uuid:string) => void = () => {};
aboutToAppear(): void {
this.initDialog()
this.getReason()
}
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)=>{
this.deleteUuid=this.item.uuid
this.delete=!this.delete
}
}),
keyboardAvoidDistance: LengthMetrics.vp(0), // 设置弹窗底部与键盘顶部间距单位vp
alignment: DialogAlignment.Center,
customStyle: true,
autoCancel: false,
backgroundColor: ('rgba(0,0,0,0.5)'),
height: '100%'
})
}
build() {
Column()
{
Stack()
{
Row()
{
Column() {
Row() {
Text('停诊原因:')
.fontColor($r('app.color.common_gray_01'))
.fontSize(17)
Text(this.reason)
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(17)
}
.margin({
top: 31
})
Row() {
Text('停诊时间:')
.fontColor($r('app.color.common_gray_01'))
.fontSize(17)
Text(this.item.date_list[0].param1 + " ~ " + this.item.date_list[0].param2)
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(17)
}.margin({ top: 10 })
if (this.item.date_list.length > 1) {
Row() {
Text('停诊时间:')
.fontColor($r('app.color.common_gray_01'))
.fontSize(17)
.visibility(Visibility.Hidden)
Text(this.item.date_list[1].param1 + " ~ " + this.item.date_list[1].param2)
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(17)
}.margin({ top: 10 })
}
if (this.item.date_list.length > 2) {
Row() {
Text('停诊时间:')
.fontColor($r('app.color.common_gray_01'))
.fontSize(17)
.visibility(Visibility.Hidden)
Text(this.item.date_list[2].param1 + " ~ " + this.item.date_list[2].param2)
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(17)
}.margin({ top: 10 })
}
}
.alignItems(HorizontalAlign.Start)
.layoutWeight(1)
Image($r('app.media.delete_notice')).width(17).height(17)
.onClick(() => {
this.dialog.open()
})
.margin({left:10})
.alignSelf(ItemAlign.Center)
}
.width('95%')
.padding(10)
.alignSelf(ItemAlign.Start)
.backgroundColor(Color.White)
.borderRadius(4)
.margin({left:10,right:10})
Text(formatDate(new Date(this.item.expire_date*1000),'YYYY-MM-DD')).fontColor(Color.White).fontSize(16)
.textAlign(TextAlign.Center)
.padding({bottom:7,left:10})
.backgroundImage($r('app.media.data_sign'))
.backgroundImageSize(ImageSize.FILL)
.width(120).height(32)
.margin({top:5,left:4})
.position({x:0,y:0})
}
Row()
{
Text('备注:')
.fontColor($r('app.color.common_gray_01'))
.fontSize(14)
.width(50)
Text(this.item.note)
.fontColor($r('app.color.common_gray_01'))
.fontSize(14)
.layoutWeight(1)
}.width('95%')
.alignItems(VerticalAlign.Top)
.padding(10)
.backgroundColor(Color.White)
.margin({top:2})
.borderRadius(4)
}
}
getReason()
{
switch (this.item.type)
{
case 1:
this.reason='出差'
break
case 2:
this.reason='休假'
break
case 3:
this.reason='临时安排'
break
case 4:
this.reason='其他'
break
}
}
}

View File

@ -0,0 +1,41 @@
export interface ListOutPatientModel {
code:string;
data:ListOutPatientBean;
message:string;
note:NoteBean
}
export interface NoteBean{
uuid:string;
note:string;
}
export interface ListOutPatientBean{
totalPage:number;
list:ListOut[];
}
export interface ListWorkPlaceBean {
code:string;
list:ListOut[];
message:string;
}
export interface ListOut{
office_name:string;
week:number;
workplace_uuid:string;
type:number;
location:string;
uuid:string;
day:string;
hospital_address:string;
hospital_name:string;
}

View File

@ -0,0 +1,14 @@
export interface PatientNoticeModel {
code:string;
data:NoticeModel;
message:string;
}
export interface NoticeModel{
uuid:string;
notice:string;
}

View File

@ -0,0 +1,25 @@
export interface StopOutPatientListModel {
code:string;
data:StopOutPatientList[];
message:string;
}
export interface StopOutPatientList{
uuid:string;
expire_date:number;
user_uuid:string;
status:number;
type:number;
note:string;
date_list:DateListBean[]
}
export interface DateListBean
{
param1:string;
param2:string;
}

View File

@ -0,0 +1,488 @@
import { hdHttp, HdResponse, BasicConstant, ExpertData, authStore, BaseBean, HdLoadingDialog,
TimestampUtil,
preferenceStore} from '@itcast/basic'
import { BusinessError } from '@kit.BasicServicesKit';
import promptAction from '@ohos.promptAction';
import { HdNav ,DatePickerDialog} from '@itcast/basic';
import { LengthMetrics, router } from '@kit.ArkUI';
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
import { HashMap } from '@kit.ArkTS';
import { StringIsEmpty } from '@nimkit/common';
import { DateListBean } from '../model/StopOutPatientListModel';
import { data } from '@kit.TelephonyKit';
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
import { ListOut, ListWorkPlaceBean } from '../model/ListOutPatientModel';
@HMRouter({ pageUrl: 'AddOutpatient' })
@Component
export struct AddOutpatient {
@State locaIndex: number = -1
@State uuid: string = ''
@State data: ListOut[] = [];
weekOptions: string[] = ['周一', '周二', '周三', '周四', '周五', '周六', '周日', '']
controller: TextAreaController = new TextAreaController();
@State timeIndex: number = -1
@State timePeriodOptions: string[] = ['上午', '下午', '晚上', '全天']
@State weekIndexList: number[] = [] // 新增多选星期索引
// 新增 weekOptions 多选每行4个自动换行
weekChunks = this.chunkArray(this.weekOptions, 4);
chunkArray<T>(arr: T[], size: number): T[][] {
const result: T[][] = [];
for (let i = 0; i < arr.length; i += size) {
result.push(arr.slice(i, i + size));
}
return result;
}
dialog: CustomDialogController = new CustomDialogController({
builder: HdLoadingDialog({ message: '加载中...' }),
customStyle: true,
alignment: DialogAlignment.Center
})
getList() {
this.dialog.open()
const hashMap: HashMap<string, string> = new HashMap();
hdHttp.httpReq<string>(BasicConstant.listWorkPlace, hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close();
let json: ListWorkPlaceBean = JSON.parse(res + '') as ListWorkPlaceBean;
if (json.code == '200') {
this.data = []
if (json.list != null) {
this.data = json.list;
}
} else {
promptAction.showToast({ message: json.message, duration: 1000 })
}
}).catch((err: BusinessError) => {
this.dialog.close();
console.info(`Response fails: ${err}`);
})
}
addStopOutPatient() {
this.dialog.open()
// const hashMap: HashMap<string, Object> = new HashMap();
// hashMap.set('type',this.reasonIndex+1+'')
// hashMap.set('note',this.noteText)
// hashMap.set('date_list', this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal)
// hdHttp.httpReqObject<string>(BasicConstant.addStopOutPatient,hashMap).then(async (res: HdResponse<string>) => {
// this.dialog.close()
// let json:BaseBean = JSON.parse(res+'') as BaseBean;
// if(json.code == '200') {
// HMRouterMgr.pop()
// } else {
// promptAction.showToast({ message: json.message })
// }
// }).catch((err: BusinessError) => {
//
// console.info(`Response fails: ${err}`);
// })
}
private dialogPublish!: CustomDialogController;
initDialog() {
this.dialogPublish = new CustomDialogController({
builder: PerfactInputSheets({
controller: this.dialogPublish,
// reasonOptions:this.reasonOptions[this.reasonIndex],
// noteText:this.noteText,
// date_list:this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal,
inputCallBack: () => {
this.addStopOutPatient()
// HMRouterMgr.pop()
}
}),
keyboardAvoidDistance: LengthMetrics.vp(0), // 设置弹窗底部与键盘顶部间距单位vp
alignment: DialogAlignment.Center,
customStyle: true,
autoCancel: false,
backgroundColor: ('rgba(0,0,0,0.5)'),
height: '100%'
})
}
aboutToAppear(): void {
this.initDialog()
this.getList()
}
build() {
Column() {
HdNav({
title: '增加门诊安排',
showRightIcon: false,
hasBorder: true,
isLeftAction: true,
leftItemAction: () => {
HMRouterMgr.pop()
}
})
Column() {
Text('门诊时间 *')
.fontSize(17)
.fontColor($r('app.color.top_title'))
.padding(10)
.width('100%')
.textAlign(TextAlign.Start)
ForEach(this.weekChunks, (row: string[], rowIndex: number) => {
Row() {
ForEach(row, (item: string, index: number) => {
Row() {
if (item !== "") {
Text(item)
.fontSize(16)
.fontColor(this.weekIndexList.indexOf(rowIndex * 4 + index) !== -1 ? $r('app.color.top_title') :
$r('app.color.999999'))
.height(42)
.layoutWeight(1)
.textAlign(TextAlign.Center)
.backgroundImageSize(ImageSize.Contain)
.backgroundImagePosition(Alignment.Center)
.backgroundImage(this.weekIndexList.indexOf(rowIndex * 4 + index) !== -1 ?
$r('app.media.check_true') : undefined)
.borderColor(this.weekIndexList.indexOf(rowIndex * 4 + index) !== -1 ? Color.Transparent :
$r('app.color.999999'))
.borderWidth(1)
.borderRadius(4)
.margin({ right: 10, top: 10 })
.onClick(() => {
if (this.weekIndexList.indexOf(rowIndex * 4 + index) !== -1) {
this.weekIndexList = this.weekIndexList.filter(i => i !== rowIndex * 4 + index)
} else {
this.weekIndexList = [...this.weekIndexList, rowIndex * 4 + index]
}
})
} else {
Text('').height(42).layoutWeight(1) // 空占位
}
}.layoutWeight(1)
})
}.padding({ left: 10 }).width('100%').margin({ left: 10, right: 10 })
})
Text()
.height(1)
.width('95%')
.padding({ left: 10, right: 10 })
.backgroundColor($r('app.color.999999'))
.margin({ top: 10 })
Row() {
ForEach(this.timePeriodOptions, (item: string, index: number) => {
Row() {
Text(item)
.fontSize(16)
.fontColor(this.timeIndex === index ? $r('app.color.top_title') : $r('app.color.999999'))
.height(42)
.layoutWeight(1)
.textAlign(TextAlign.Center)
.backgroundImageSize(ImageSize.Contain)
.backgroundImagePosition(Alignment.Center)
.backgroundImage(this.timeIndex === index ? $r('app.media.check_true') : undefined)
.borderColor(this.timeIndex === index ? Color.Transparent : $r('app.color.999999'))
.borderWidth(1)
.borderRadius(4)
.margin({ right: 10, top: 10 })
.onClick(() => {
this.timeIndex = index
})
}.layoutWeight(1)
})
}.padding({ left: 10 }).width('100%')
.margin({ left: 10, right: 10 })
Text('门诊地点 *')
.fontSize(17)
.fontColor($r('app.color.top_title'))
.padding(10)
.width('100%')
.textAlign(TextAlign.Start)
List() {
ForEach(this.data, (item: ListOut, index) => {
ListItem() {
Stack()
{
Column() {
Text(item.hospital_name)
.fontColor($r('app.color.common_gray_01'))
.fontSize(18)
.margin({ top: 10 })
Text(item.office_name)
.fontColor($r('app.color.common_gray_03'))
.fontSize(14)
.margin({ top: 10 })
Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap, space: { cross: LengthMetrics.vp(10) } }) {
Text(item.location)
.fontColor($r('app.color.common_gray_03'))
.fontSize(14)
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.ellipsisMode(EllipsisMode.END)
.padding({ right: 3 })
Text(this.getoutpatientType(item.type))
.fontSize(12)
.borderColor($r('app.color.top_title'))
.fontColor($r('app.color.top_title'))
.borderRadius(8)
.borderWidth(1)
.padding({
left: 4,
right: 4,
top: 2,
bottom: 2
})
}
.margin({ top: 10 })
}
.onClick(()=>{
this.locaIndex=index
})
.id('locationlist'+index)
.padding({ left: 10, right: 10, bottom: 10 })
.alignItems(HorizontalAlign.Start)
.borderWidth(1)
.borderRadius(4)
.borderColor(this.locaIndex==index ?$r('app.color.top_title'):
$r('app.color.999999'))
Image($r('app.media.addoutpa_true'))
.width(38)
.height(38)
.position({ x: 0, y: '5%' }) // 右下角
// .offset({ x: -10, y: -10 }) // 距离右下角10px
}
}
})
}
.layoutWeight(1)
.width('95%')
.divider({
strokeWidth: 5,
color:Color.White
})
.edgeEffect(EdgeEffect.None)
.layoutWeight(1)
.clip(true)
} .backgroundColor(Color.White)
.width('100%')
Blank()
Column() {
Text('确定发布')
.height(42)
.width(168)
.fontSize(17)
.backgroundColor($r('app.color.top_title'))
.fontColor($r('app.color.white'))
.textAlign(TextAlign.Center)
.borderRadius(4)
.margin({ top: 8 })
}
.width('100%')
.height(57)
.backgroundColor(Color.White)
.onClick(() => {
this.dialogPublish.open()
})
}
.width('100%')
.height('100%')
.backgroundColor($r('app.color.home_gray'))
}
getoutpatientType(type:number)
{
switch (type)
{
case 1:
return '普通门诊'
break
case 2:
return '专家门诊'
break
case 3:
return '特需门诊'
break
case 4:
return '专科/专病门诊'
break
}
return ''
}
}
@CustomDialog
export struct PerfactInputSheets {
controller:CustomDialogController;
@Prop inputTitle:string = '公告内容';
@Prop inputPlaceholder:string = ''
// 添加回调函数属性
@State okColor:ResourceStr=$r('app.color.top_title')
@State cancelColor:ResourceStr='#333333'
@State okText:ResourceStr='确定发布'
@State cancelText:ResourceStr='返回修改'
@State reasonOptions:string=''
@State noteText:string=''
@State date_list: DateListBean[] = []
private inputCallBack: () => void = () => {};
@State needcancelCallBack:boolean=false
// 修改构造函数
constructor(controller: CustomDialogController, inputCallBack: () => void) {
super();
this.controller = controller;
this.inputCallBack = inputCallBack;
}
build() {
Row(){
Column() {
Text(this.inputTitle)
.fontSize(18)
.padding(20)
.width('100%')
.textAlign(TextAlign.Center)
.fontColor('#444444')
Text('停诊原因:' + this.reasonOptions)
.fontSize(14)
.fontColor('#444444')
.backgroundColor(Color.White)
.padding({ left: 10, right: 10 })
.width('79%')
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
Text(this.date_list[0].param1 + ' 至 ' + this.date_list[0].param2)
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(14)
}.margin({ top: 10 }).padding({ left: 10, right: 10 })
.width('79%')
if (this.date_list.length > 1) {
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
.visibility(Visibility.Hidden)
Text(this.date_list[1].param1 + " 至 " + this.date_list[1].param2)
.fontColor('#444444').padding({ left: 3 })
.fontSize(14)
}.margin({ top: 10 }).padding({ left: 10, right: 10 })
.width('79%')
}
if (this.date_list.length > 2) {
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
.visibility(Visibility.Hidden)
Text(this.date_list[2].param1 + " 至 " + this.date_list[2].param2)
.fontColor('#444444').padding({ left: 3 })
.fontSize(14)
}
.width('79%')
.margin({ top: 10 }).padding({ left: 10, right: 10 })
}
Row() {
Text()
{
Span('备').fontColor('#444444')
Span('备注').fontColor(Color.Transparent)
Span('注:').fontColor('#444444')
}
.fontColor('#444444')
.fontSize(14)
Text(this.noteText)
.fontColor('#444444').padding({ left: 3 })
.fontSize(14)
.textAlign(TextAlign.Start)
.layoutWeight(1)
}.margin({ top: 10 }).padding({ left: 10, right: 10 })
.alignItems(VerticalAlign.Top)
.width('79%')
.visibility(this.noteText?Visibility.Visible:Visibility.None)
Text().width(20).height(20)
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
.visibility(Visibility.Hidden)
Text(TimestampUtil.getTodayChinese()+'由医生本人发布')
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(14)
}
.margin({ top: 10 }).padding({ left: 10, right: 10 })
Text('').height(1).width('100%')
.backgroundColor($r('app.color.home_gray')).margin({ top: 10 })
Row() {
Text(this.cancelText)
.fontSize(15)
.fontColor(this.cancelColor)
.textAlign(TextAlign.Center)
.height(30)
.layoutWeight(1)
.onClick(() => {
this.controller.close()
})
Text('').height(30).width(1)
.backgroundColor($r('app.color.home_gray'))
Text(this.okText)
.textAlign(TextAlign.Center)
.fontColor(this.okColor)
.fontSize(15)
.onClick(() => {
this.controller.close()
this.inputCallBack();
})
.height(30)
.layoutWeight(1)
}.margin({ top: 10, bottom: 10 }).width('100%')
}
.width('80%').backgroundColor(Color.White)
}.borderRadius(24)
}
}

View File

@ -0,0 +1,181 @@
import {
BaseBean,
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 { promptAction } from '@kit.ArkUI';
import { StringIsEmpty } from '@nimkit/common';
import { ListOut, ListOutPatientModel } from '../model/ListOutPatientModel';
import { ItemCompArrange } from '../components/ItemCompArrange';
@HMRouter({ pageUrl: 'ArrangementsComp' })
@Component
export struct ArrangementsComp {
dialog: CustomDialogController = new CustomDialogController({
builder: HdLoadingDialog({ message: '加载中...' }),
customStyle: true,
alignment: DialogAlignment.Center
})
@State pageNumber:number = 1;
@State totalPageNumer:number = 1;
@State data:ListOut[]=[];
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
@State
@Watch('deleteOutPatient')
delete: boolean=false
@State deleteUuid:string=''
aboutToAppear() {
this.getList();
}
getList() {
const hashMap: HashMap<string, string> = new HashMap();
hashMap.set('page',this.pageNumber.toString());
this.dialog.open()
hdHttp.httpReq<string>(BasicConstant.listOutPatient,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close();
let json:ListOutPatientModel = JSON.parse(res+'') as ListOutPatientModel;
if(json.code == '200') {
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;
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.getList();
}
build() {
Column(){
Text().height(20).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.getList();
setTimeout(() => {
this.controller.refreshSuccess()
}, 1000)
},
onCanPullRefresh:()=>{
if (!this.scroller.currentOffset()) {
/*处理无数据,为空的情况*/
return true
}
//如果列表到顶返回true表示可以下拉返回false表示无法下拉
return this.scroller.currentOffset().yOffset <= 0
},
onLoad:()=>{
this.pageNumber++;
this.getList();
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%')
.backgroundColor($r('app.color.home_gray'))
}
@Builder
contentView(){
List({ scroller: this.scroller }) {
ForEach(this.data, (item: ListOut, index) => {
ListItem() {
ItemCompArrange({item:item,deleteUuid:this.deleteUuid,delete:this.delete})
}
})
}
.divider({
strokeWidth: 5,
})
.width('100%')
.height('100%')
.edgeEffect(EdgeEffect.None)
}
deleteOutPatient() {
this.dialog.open()
const hashMap: HashMap<string, string> = new HashMap();
hashMap.set('uuid',this.deleteUuid)
hdHttp.httpReq<string>(BasicConstant.deleteOutPatient,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close();
let json:BaseBean = JSON.parse(res+'') as BaseBean;
if(json.code == '200') {
this.getList();
} else {
promptAction.showToast({ message: json.message, duration: 1000 })
}
}).catch((err: BusinessError) => {
this.dialog.close();
console.info(`Response fails: ${err}`);
})
}
}

View File

@ -38,7 +38,7 @@ export struct MyOpinionComp {
{
this.photos.splice(this.removeIndex, 1)
this.maxSelectNumber =6- this.photos.length;
let a= this.maxSelectNumber
}
private custom!:CustomDialogController;
dialog: CustomDialogController = new CustomDialogController({

View File

@ -0,0 +1,29 @@
import { HMRouter } from '@hadss/hmrouter';
import { BasicConstant,HdNav } from '@itcast/basic'
import { TabBarOutComp } from './TabBarOutComp';
@Component
export struct OutpatientComp {
@State
@Watch('onChangeIndex')
activeIndex: number = 0
onChangeIndex() {
}
build() {
Column() {
TabBarOutComp({activeIndex:this.activeIndex});
}.width('100%')
.height('100%')
}
}

View File

@ -0,0 +1,153 @@
import { hdHttp, HdResponse, BasicConstant, ExpertData, authStore, BaseBean, HdLoadingDialog } from '@itcast/basic'
import { BusinessError } from '@kit.BasicServicesKit';
import promptAction from '@ohos.promptAction';
import { HdNav } from '@itcast/basic';
import { router } from '@kit.ArkUI';
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
import { HashMap } from '@kit.ArkTS';
import { StringIsEmpty } from '@nimkit/common';
@HMRouter({ pageUrl: 'OutpatientInformation' })
@Component
export struct OutpatientInformation {
@State feedbackText: string = ''
@State noteText: string = ''
@State uuid: string = ''
controller:TextAreaController = new TextAreaController();
@State params:Record<string, string>= HMRouterMgr.getCurrentParam() as Record<string, string>;
dialog: CustomDialogController = new CustomDialogController({
builder: HdLoadingDialog({ message: '加载中...' }),
customStyle: true,
alignment: DialogAlignment.Center
})
addOutPatientA() {
const hashMap: HashMap<string, string> = new HashMap();
hashMap.set('workplace_uuid','')
hashMap.set('week','')
hashMap.set('day','')
hashMap.set('type','2')
hashMap.set('uuid',this.uuid)
hashMap.set('note',this.feedbackText)
hdHttp.httpReq<string>(BasicConstant.addOutPatientA,hashMap).then(async (res: HdResponse<string>) => {
}).catch((err: BusinessError) => {
console.info(`Response fails: ${err}`);
})
}
mailanNoticeAdd() {
this.dialog.open()
const hashMap: HashMap<string, string> = new HashMap();
hashMap.set('notice',this.feedbackText)
hdHttp.httpReq<string>(BasicConstant.mailanNoticeAdd,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close()
let json:BaseBean = JSON.parse(res+'') as BaseBean;
if(json.code == '200') {
HMRouterMgr.pop()
} else {
promptAction.showToast({ message: json.message })
}
}).catch((err: BusinessError) => {
console.info(`Response fails: ${err}`);
})
}
mailanNoticeUpate() {
this.dialog.open()
const hashMap: HashMap<string, string> = new HashMap();
hashMap.set('uuid',this.uuid)
hashMap.set('notice',this.feedbackText)
hdHttp.httpReq<string>(BasicConstant.mailanNoticeUpate,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close()
let json:BaseBean = JSON.parse(res+'') as BaseBean;
if(json.code == '200') {
HMRouterMgr.pop()
} else {
promptAction.showToast({ message: json.message })
}
}).catch((err: BusinessError) => {
console.info(`Response fails: ${err}`);
})
}
aboutToAppear(): void {
this.noteText=this.params.note
this.feedbackText=this.noteText+''
this.uuid=this.params.uuid
}
build() {
Column() {
HdNav({ title: '门诊信息', showRightIcon: false, hasBorder: true, isLeftAction:true,leftItemAction:()=>{
HMRouterMgr.pop()
} })
// 输入框区域
TextArea({
placeholder:'您可以在这里填写想告诉患者的停诊补充信息最多填写300个字哦~',
controller:this.controller,
text: $$this.feedbackText
})
.placeholderFont({size:16})
.placeholderColor('#999999')
.width('95%')
.height(230)
.margin(10)
.fontSize(16)
.backgroundColor(Color.White)
.borderRadius(5)
.border({
width:1,
color:'#999999'
})
// 提交按钮
Button({ type: ButtonType.Normal }){
Text('提交')
}
.width('90%')
.height(53)
.position({x:'5%',y:'91%'})
.backgroundColor('#ffffff')
.borderColor($r('app.color.main_color'))
.borderRadius(8)
.borderWidth(1)
.fontColor($r('app.color.main_color'))
.onClick(() => {
if (this.feedbackText.length <= 0 || !this.feedbackText) {
promptAction.showToast({message:'请输入信息'})
return
}
if(this.noteText==this.feedbackText.trim())
{
promptAction.showToast({message:'未修改信息内容'})
return
}
if (this.feedbackText.length > 200) {
promptAction.showToast({message:'内容不能大于300字'})
return
}
this.addOutPatientA()
if(StringIsEmpty(this.noteText))
{
this.mailanNoticeAdd();
}
else
{
this.mailanNoticeUpate();
}
})
}
.width('100%')
.height('100%')
.backgroundColor(Color.White)
}
}

View File

@ -3,12 +3,14 @@ import {
applyListModel,
authStore, BasicConstant,
ChangeUtil,
hdHttp, HdLoadingDialog,HdNav, HdResponse, patientDbManager,
hdHttp, HdLoadingDialog,HdNav, HdResponse,
PatientData,
patientDbManager,
PatientListModel,
PatientsData,
preferenceStore} from '@itcast/basic'
import { Groups } from '../model/Groups';
import { display } from '@kit.ArkUI';
import { display, promptAction } from '@kit.ArkUI';
import { StringIsEmpty } from '@nimkit/common';
import I18n from '@ohos.i18n';
import Intl from '@ohos.intl';
@ -42,6 +44,25 @@ export struct PatientListComp {
@State old:number=preferenceStore.getItemNumber('old_patient_num')
@State applyArray:applyListModel[] = [];
@State needShow:boolean=false
@State delectuuid:string=''
@State delectname:string=''
@State positionDelete:number = 0
dialogDelete = new CustomDialogController({
builder: DelectDialog(
{
name:this.delectname,
CallBack:()=>{
// regionDataGroupsList
// this.applyArray.splice(this.positionDelete,1)
this.deletePatientAction(this.delectuuid)
}
}
),
cornerRadius: 4,
width: '70%',
})
aboutToAppear() {
this. PatientsData()
@ -263,7 +284,7 @@ export struct PatientListComp {
ListItemGroup({ header: this.itemHead(regionDataGroups.title) }) {
ForEach(regionDataGroups.regionDataList, (regionData: PatientsData, index?: number) => {
ForEach(regionDataGroups.regionDataList, (regionData: PatientsData, index: number) => {
ListItem() {
Column()
{
@ -276,7 +297,7 @@ export struct PatientListComp {
.borderRadius(8)
Column()
{
Text(regionData.realName)
Text(regionData.nickname)
.fontSize(16)
.fontColor($r('app.color.common_gray_01'))
.width('100%')
@ -322,15 +343,24 @@ export struct PatientListComp {
.width('100%')
Text().height(1).width('100%').backgroundColor( $r('sys.color.ohos_id_color_panel_bg'))
}
}
// .height(100)
.width('100%')
.align(Alignment.Start)
.onClick(() => {
})
.gesture(
LongPressGesture({
duration: 1000, // 设置长按触发时间为1秒
repeat: true // 允许连续触发回调
})
.onAction((event: GestureEvent) => {
this.delectuuid=regionData.uuid
this.delectname=regionData.realName
this.positionDelete=index
this.dialogDelete.open()
})
)
})
}
@ -420,9 +450,6 @@ export struct PatientListComp {
}.width('100%')
.height('100%')
// .backgroundColor($r('app.color.white'))
}
private collationData(regionRequestData: PatientsData[]) {
@ -449,15 +476,7 @@ export struct PatientListComp {
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);
@ -488,7 +507,80 @@ export struct PatientListComp {
}
return 0;
}
deletePatientAction(patientUuid:string) {
this.dialog.open()
hdHttp.post<string>(BasicConstant.cancelRes, {
"expertUuid": authStore.getUser().uuid,
"patientUuid":patientUuid
} as Record<string,string>).then(async (res: HdResponse<string>) => {
this.dialog.close();
let json:Record<string,string | Record<string,string>> = JSON.parse(res+'') as Record<string,string | Record<string,string>>
promptAction.showToast({ message: String(json.message), duration: 1000 })
if(json.code == '1') {
const singlePatient: PatientData = {
uuid:patientUuid,
nickname: '',
mobile: '',
realName: '',
nation: '',
sex: 0,
type: 2,
photo: '',
expertUuid: authStore.getUser().uuid
}
const success = await patientDbManager.updatePatientByData(singlePatient)
if (success) {
console.info('修改成功')
} else {
console.info('修改失败')
}
this.PatientsData()
} else {
console.error('获取患者信息失败:'+json.message)
}
}).catch((err: BusinessError) => {
this.dialog.close();
console.error(`Response fails: ${err}`);
})
}
}
interface updateExtraData {
expertUuid: string
}
@CustomDialog
struct DelectDialog {
controller: CustomDialogController
CallBack: () => void = () => {};
name:string=''
build() {
Column() {
Text('解除随访患者')
.fontSize(17)
.fontColor('#444444')
.padding(15)
Text('').height(1).width('100%')
.backgroundColor($r('app.color.home_gray'))
Text('解除['+this.name+']的随访关系')
.fontSize(16).fontColor($r('app.color.common_gray_03'))
.padding(10).width('100%').textAlign(TextAlign.Start)
.onClick(() => {
if (this.controller != undefined) {
this.controller.close()
this.CallBack();
}
})
Text('').height(1).width('100%')
.backgroundColor($r('app.color.home_gray'))
.margin({bottom:10})
}
.backgroundColor($r('app.color.white'))
}
}

View File

@ -0,0 +1,577 @@
import { hdHttp, HdResponse, BasicConstant, ExpertData, authStore, BaseBean, HdLoadingDialog,
TimestampUtil,
preferenceStore} from '@itcast/basic'
import { BusinessError } from '@kit.BasicServicesKit';
import promptAction from '@ohos.promptAction';
import { HdNav ,DatePickerDialog} from '@itcast/basic';
import { LengthMetrics, router } from '@kit.ArkUI';
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';
import { HashMap } from '@kit.ArkTS';
import { StringIsEmpty } from '@nimkit/common';
import { DateListBean } from '../model/StopOutPatientListModel';
import { data } from '@kit.TelephonyKit';
import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet';
@HMRouter({ pageUrl: 'ReleaseOutpatient' })
@Component
export struct ReleaseOutpatient {
@State noteText: string =preferenceStore.getItemString('ReleaseOutpatient')
@State uuid: string = ''
@State reasonIndex: number = -1
reasonOptions: string[] = ['出差', '休假', '临时安排', '其他']
controller:TextAreaController = new TextAreaController();
@State date_list_normal: DateListBean[] = [{ param1: '', param2: '' }]
@State date_list_temp: DateListBean[] = [{ param1: '', param2: '' }]
@State tmp_list: DateListBean[] = []
@State private datePickerType: 'start' | 'end' = 'start'
@State private datePickerIndex: number = 0
@State selected:string=TimestampUtil.getToday()
@State timePeriodOptions: string[] = ['上午', '下午', '晚上', '全天']
@State showTimePeriodDropdown: number = -1 // 当前下拉的index-1为无
dialog: CustomDialogController = new CustomDialogController({
builder: HdLoadingDialog({ message: '加载中...' }),
customStyle: true,
alignment: DialogAlignment.Center
})
private datePickerDialog!: CustomDialogController;
addStopOutPatient() {
this.dialog.open()
const hashMap: HashMap<string, Object> = new HashMap();
hashMap.set('type',this.reasonIndex+1+'')
hashMap.set('note',this.noteText)
hashMap.set('date_list', this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal)
hdHttp.httpReqObject<string>(BasicConstant.addStopOutPatient,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close()
let json:BaseBean = JSON.parse(res+'') as BaseBean;
if(json.code == '200') {
HMRouterMgr.pop()
} else {
promptAction.showToast({ message: json.message })
}
}).catch((err: BusinessError) => {
console.info(`Response fails: ${err}`);
})
}
private dialogPublish!:CustomDialogController;
initDialog() {
this.dialogPublish = new CustomDialogController({
builder:PerfactInputSheets({
controller:this.dialogPublish,
reasonOptions:this.reasonOptions[this.reasonIndex],
noteText:this.noteText,
date_list:this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal,
inputCallBack:()=>{
this.addStopOutPatient()
// HMRouterMgr.pop()
}
}),
keyboardAvoidDistance: LengthMetrics.vp(0), // 设置弹窗底部与键盘顶部间距单位vp
alignment: DialogAlignment.Center,
customStyle: true,
autoCancel: false,
backgroundColor: ('rgba(0,0,0,0.5)'),
height: '100%'
})
}
private initDatePickerDialog() {
this.datePickerDialog = new CustomDialogController({
builder: DatePickerDialog({
controller:this.datePickerDialog,
title:'选择开始日期',
dateOptions: {
start: new Date('1930-01-01'),
end: new Date('2100-01-01'),
selected: new Date(this.selected),
},
dateSelected:(date:string) => {
let isTemp = this.reasonIndex === 2
this.tmp_list = isTemp ? [...this.date_list_temp] : [...this.date_list_normal]
if (this.datePickerType === 'start') {
if (date < TimestampUtil.getToday()|| date > this.tmp_list[this.datePickerIndex].param2) {
if (date < TimestampUtil.getToday())
{
promptAction.showToast({ message: '不能发布过期时间' });
}
else
{
promptAction.showToast({ message: '结束时间不能早于开始日期' });
}
this.tmp_list[this.datePickerIndex].param1 = ''
} else {
let list = isTemp ? this.date_list_temp : this.date_list_normal
let isDuplicate = list.some((item, idx) => idx != this.datePickerIndex && item.param2 == this.tmp_list[this.datePickerIndex].param2 && item.param1 == date);
if (isDuplicate) {
promptAction.showToast({ message: '已存在相同停诊时间' });
this.tmp_list[this.datePickerIndex].param1 = ''
}
else
{
this.tmp_list[this.datePickerIndex].param1 = date
}
}
} else {
// 选择开始日期时校验
let list = isTemp ? this.date_list_temp : this.date_list_normal
let isDuplicate = list.some((item, idx) => idx != this.datePickerIndex && item.param1 == this.tmp_list[this.datePickerIndex].param1 && item.param2 == date);
if (isDuplicate) {
promptAction.showToast({ message: '已存在相同停诊时间' });
this.tmp_list[this.datePickerIndex].param2 = ''
} else {
if (date < TimestampUtil.getToday() || date < this.tmp_list[this.datePickerIndex].param1) {
promptAction.showToast({ message: '不能发布过期时间' });
this.tmp_list[this.datePickerIndex].param2 = ''
} else {
this.tmp_list[this.datePickerIndex].param2 = date
}
}
}
if(isTemp) {
this.date_list_temp = this.tmp_list
} else {
this.date_list_normal = this.tmp_list
}
}
}),
alignment: DialogAlignment.Bottom,
customStyle: true,
autoCancel: false,
backgroundColor: ('rgba(0,0,0,0.5)'),
height: '100%'
});
}
private custom!:CustomDialogController;
initDialogcustom() {
this.custom = new CustomDialogController({
builder:PerfactInputSheet({
controller:this.custom,
inputTitle:'提示',
okText:'保存',
needcancelCallBack:true,
okColor:$r('app.color.top_title'),
inputPlaceholder:'您有未发布的内容,是否保存?',
style:'2',
inputCallBack:(input: string,title:string)=>{
if(title=='needcancelCallBack')
{
preferenceStore.setItemString('ReleaseOutpatient','')
}
else
{
preferenceStore.setItemString('ReleaseOutpatient',this.noteText)
}
HMRouterMgr.pop()
}
}),
alignment: DialogAlignment.Center,
customStyle: true,
autoCancel: false,
backgroundColor: ('rgba(0,0,0,0.5)'),
height: '100%'
})
}
aboutToAppear(): void {
this.initDatePickerDialog()
this.initDialog()
this.initDialogcustom()
}
build() {
Column() {
HdNav({ title: '发布停诊', showRightIcon: false, hasBorder: true, isLeftAction:true,leftItemAction:()=>{
if(this.noteText.trim()!='')
{
this.custom.open()
}
else
{
HMRouterMgr.pop()
}
} })
Column()
{
Text('停诊原因 *').fontSize(17).fontColor($r('app.color.top_title')).padding(10).width('100%').textAlign(TextAlign.Start)
Row() {
ForEach(this.reasonOptions, (item: string, index: number) => {
Row() {
Text(item)
.fontSize(16)
.fontColor(this.reasonIndex === index ? $r('app.color.top_title') : $r('app.color.999999'))
.height(42)
.layoutWeight(1)
.textAlign(TextAlign.Center)
.backgroundImageSize(ImageSize.Contain)
.backgroundImagePosition(Alignment.Center)
.backgroundImage(this.reasonIndex === index ? $r('app.media.check_true') : undefined)
.borderColor(this.reasonIndex === index ? Color.Transparent : $r('app.color.999999') )
.borderWidth(1)
.borderRadius(4)
.margin({ right: 10 })
.onClick(() => {
this.reasonIndex = index
})
}.layoutWeight(1)
})
}.padding({ left: 10}).width('100%')
Row()
{
Text('停诊时间 *').fontSize(17).fontColor($r('app.color.top_title')).padding(10).width('100%').textAlign(TextAlign.Start).layoutWeight(1)
Text() {
Span("+").fontColor($r('app.color.top_title'))
Span("再次添加").fontColor($r('app.color.common_gray_03'))
}.fontSize(16)
.visibility((this.reasonIndex === 2 ? this.date_list_temp.length : this.date_list_normal.length) < 3 ? Visibility.Visible : Visibility.None)
.onClick(() => {
let list = this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal
let hasempty = list.some((item, idx) => item.param1 == '' || item.param2 == '');
if(hasempty) {
promptAction.showToast({ message: '请选择停诊时间' });
} else {
if(this.reasonIndex === 2) {
this.date_list_temp = [...this.date_list_temp, { param1: '', param2: '' }]
} else {
this.date_list_normal = [...this.date_list_normal, { param1: '', param2: '' }]
}
}
})
}
.margin({ left: 10, right: 10 }).width('100%')
Column() {
ForEach(this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal, (item: DateListBean, index: number) => {
Row() {
Text(item.param1 ? item.param1 : '选择开始日期')
.fontSize(16)
.fontColor(item.param1 ? $r('app.color.common_gray_03') : $r('app.color.999999'))
.height(42)
.textAlign(TextAlign.Center)
.borderColor($r('app.color.999999'))
.layoutWeight(1)
.borderWidth(1)
.borderRadius(4)
.onClick(() => {
if(this.reasonIndex < 0) {
promptAction.showToast({ message: '请先选择停诊原因' });
return;
}
this.datePickerType = 'start'
this.datePickerIndex = index
this.selected = item.param1 ? item.param1 : TimestampUtil.getToday()
this.datePickerDialog.open()
})
Text('至')
.fontSize(16)
.fontColor($r('app.color.999999'))
.textAlign(TextAlign.Center)
.visibility(this.reasonIndex === 2?Visibility.Hidden:Visibility.Visible)
.margin({left:10,right:10})
// 临时安排特殊处理
if (this.reasonIndex === 2) {
// 下拉选择时段
Column() {
Text(item.param2 ? item.param2 : '请选择时段')
.fontSize(16)
.fontColor(item.param2 ? $r('app.color.common_gray_03') : $r('app.color.999999'))
.height(42)
.textAlign(TextAlign.Center)
.borderColor($r('app.color.999999'))
.borderWidth(1)
.width('100%')
.borderRadius(4)
.onClick(() => {
if(this.reasonIndex < 0) {
promptAction.showToast({ message: '请先选择停诊原因' });
return;
}
this.showTimePeriodDropdown = index
})
// 悬浮下拉菜单
if (this.showTimePeriodDropdown === index) {
Column() {
ForEach(this.timePeriodOptions, (period: string, pidx: number) => {
Text(period)
.fontSize(16)
.fontColor($r('app.color.common_gray_03'))
.padding(8)
.onClick(() => {
let newList = [...this.date_list_temp]
let isDuplicate = this.date_list_temp.some((item, idx) => idx != this.datePickerIndex && item.param1 == this.tmp_list[this.datePickerIndex].param1 && item.param2 == period);
if (isDuplicate) {
promptAction.showToast({ message: '已存在相同停诊时间' });
newList[index]. param2= ''
} else {
newList[index]. param2= period
}
this.date_list_temp = newList
this.showTimePeriodDropdown = -1
})
})
}
.backgroundColor(Color.Red)
.borderColor($r('app.color.999999'))
.borderWidth(1)
.borderRadius(4)
.width('100%')
.zIndex(199)
.position({ x: 0, y: 0 })
}
}.layoutWeight(1)
} else {
Text(item.param2 ? item.param2 : '选择结束日期')
.fontSize(16)
.fontColor(item.param2 ? $r('app.color.common_gray_03') : $r('app.color.999999'))
.height(42)
.layoutWeight(1)
.textAlign(TextAlign.Center)
.borderColor($r('app.color.999999'))
.borderWidth(1)
.borderRadius(4)
.onClick(() => {
if(this.reasonIndex < 0) {
promptAction.showToast({ message: '请先选择停诊原因' });
return;
}
this.datePickerType = 'end'
this.datePickerIndex = index
this.selected = item.param2 ? item.param2 : TimestampUtil.getToday()
this.datePickerDialog.open()
})
}
Image($r('app.media.delete_notice')).width(17).height(17).margin({left:10})
.visibility(index > 0 && (this.reasonIndex === 2 ? this.date_list_temp.length : this.date_list_normal.length) > 1 ? Visibility.Visible : Visibility.Hidden)
.onClick(() => {
if (index > 0 && (this.reasonIndex === 2 ? this.date_list_temp.length : this.date_list_normal.length) > 1) {
if(this.reasonIndex === 2) {
let newList = [...this.date_list_temp]
newList.splice(index, 1)
this.date_list_temp = newList
} else {
let newList = [...this.date_list_normal]
newList.splice(index, 1)
this.date_list_normal = newList
}
}
})
}
.padding({ left: 10, bottom: 10, right: 10 }).width('100%')
})
}
Text('备注').fontSize(17).fontColor($r('app.color.top_title')).padding(10).width('100%').textAlign(TextAlign.Start)
TextArea({ placeholder: '您可以在这里填写想告诉患者的停诊补充信息最多填写300个字哦', text: $$this.noteText })
.fontColor($r('app.color.common_gray_03'))
.height(100)
.textAlign(TextAlign.Start)
.fontSize(14).padding(9).margin({left:10,right:10,bottom:10})
.backgroundColor($r('app.color.home_gray')).borderRadius(8)
} .backgroundColor($r('app.color.white'))
Blank()
Column()
{
Text('确定发布').height(42).width(168).fontSize(17)
.backgroundColor($r('app.color.top_title'))
.fontColor($r('app.color.white'))
.textAlign(TextAlign.Center)
.borderRadius(4)
.margin({top:8})
}
.width('100%')
.height(57)
.backgroundColor(Color.White)
.onClick(() => {
if(this.reasonIndex < 0) {
promptAction.showToast({ message: '请先选择停诊原因' });
return;
}
let list = this.reasonIndex === 2 ? this.date_list_temp : this.date_list_normal
let hasempty = list.some((item, idx) => item.param1 == '' || item.param2 == '');
if(hasempty) {
promptAction.showToast({ message: '请选择停诊时间' });
return
}
this.dialogPublish.open()
})
}
.width('100%')
.height('100%')
.backgroundColor($r('app.color.home_gray'))
}
}
@CustomDialog
export struct PerfactInputSheets {
controller:CustomDialogController;
@Prop inputTitle:string = '公告内容';
@Prop inputPlaceholder:string = ''
// 添加回调函数属性
@State okColor:ResourceStr=$r('app.color.top_title')
@State cancelColor:ResourceStr='#333333'
@State okText:ResourceStr='确定发布'
@State cancelText:ResourceStr='返回修改'
@State reasonOptions:string=''
@State noteText:string=''
@State date_list: DateListBean[] = []
private inputCallBack: () => void = () => {};
@State needcancelCallBack:boolean=false
// 修改构造函数
constructor(controller: CustomDialogController, inputCallBack: () => void) {
super();
this.controller = controller;
this.inputCallBack = inputCallBack;
}
build() {
Row(){
Column() {
Text(this.inputTitle)
.fontSize(18)
.padding(20)
.width('100%')
.textAlign(TextAlign.Center)
.fontColor('#444444')
Text('停诊原因:' + this.reasonOptions)
.fontSize(14)
.fontColor('#444444')
.backgroundColor(Color.White)
.padding({ left: 10, right: 10 })
.width('79%')
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
Text(this.date_list[0].param1 + ' 至 ' + this.date_list[0].param2)
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(14)
}.margin({ top: 10 }).padding({ left: 10, right: 10 })
.width('79%')
if (this.date_list.length > 1) {
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
.visibility(Visibility.Hidden)
Text(this.date_list[1].param1 + " 至 " + this.date_list[1].param2)
.fontColor('#444444').padding({ left: 3 })
.fontSize(14)
}.margin({ top: 10 }).padding({ left: 10, right: 10 })
.width('79%')
}
if (this.date_list.length > 2) {
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
.visibility(Visibility.Hidden)
Text(this.date_list[2].param1 + " 至 " + this.date_list[2].param2)
.fontColor('#444444').padding({ left: 3 })
.fontSize(14)
}
.width('79%')
.margin({ top: 10 }).padding({ left: 10, right: 10 })
}
Row() {
Text()
{
Span('备').fontColor('#444444')
Span('备注').fontColor(Color.Transparent)
Span('注:').fontColor('#444444')
}
.fontColor('#444444')
.fontSize(14)
Text(this.noteText)
.fontColor('#444444').padding({ left: 3 })
.fontSize(14)
.textAlign(TextAlign.Start)
.layoutWeight(1)
}.margin({ top: 10 }).padding({ left: 10, right: 10 })
.alignItems(VerticalAlign.Top)
.width('79%')
.visibility(this.noteText?Visibility.Visible:Visibility.None)
Text().width(20).height(20)
Row() {
Text('停诊时间:')
.fontColor('#444444')
.fontSize(14)
.visibility(Visibility.Hidden)
Text(TimestampUtil.getTodayChinese()+'由医生本人发布')
.fontColor($r('app.color.common_gray_03')).padding({ left: 3 })
.fontSize(14)
}
.margin({ top: 10 }).padding({ left: 10, right: 10 })
Text('').height(1).width('100%')
.backgroundColor($r('app.color.home_gray')).margin({ top: 10 })
Row() {
Text(this.cancelText)
.fontSize(15)
.fontColor(this.cancelColor)
.textAlign(TextAlign.Center)
.height(30)
.layoutWeight(1)
.onClick(() => {
this.controller.close()
})
Text('').height(30).width(1)
.backgroundColor($r('app.color.home_gray'))
Text(this.okText)
.textAlign(TextAlign.Center)
.fontColor(this.okColor)
.fontSize(15)
.onClick(() => {
this.controller.close()
this.inputCallBack();
})
.height(30)
.layoutWeight(1)
}.margin({ top: 10, bottom: 10 }).width('100%')
}
.width('80%').backgroundColor(Color.White)
}.borderRadius(24)
}
}

View File

@ -0,0 +1,141 @@
import {
BaseBean,
BasicConstant, EmptyViewComp, hdHttp, HdLoadingDialog, HdNav, HdResponse, HdSearchNav } from '@itcast/basic'
import { HMRouter, HMRouterMgr } from '@hadss/hmrouter'
import { HashMap } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { StopOutPatientList, StopOutPatientListModel } from '../model/StopOutPatientListModel';
import { ItemCompStop } from '../components/ItemCompStop';
@HMRouter({ pageUrl: 'StopNoticeComp' })
@Component
export struct StopNoticeComp {
dialog: CustomDialogController = new CustomDialogController({
builder: HdLoadingDialog({ message: '加载中...' }),
customStyle: true,
alignment: DialogAlignment.Center
})
@State params:Record<string, string>= HMRouterMgr.getCurrentParam() as Record<string, string>;
@State data:StopOutPatientList[]=[];
@State isEmptyViewVisible: boolean = false; // 控制显隐的状态变量
@State empty:string='暂无数据'
@Link stopnum:number
aboutToAppear() {
this.getList();
}
@State
@Watch('deleteStopOutPatient')
delete: boolean=false
@State deleteUuid:string=''
getList() {
this.dialog.open()
this.empty='暂无停诊公告'
const hashMap: HashMap<string, string> = new HashMap();
hdHttp.httpReq<string>(BasicConstant.stopOutPatientList,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close();
let json:StopOutPatientListModel = JSON.parse(res+'') as StopOutPatientListModel;
if(json.code == '200') {
this.data=[]
if(json.data!=null)
{
this.data = json.data;
this.stopnum=json.data.length
}
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();
console.info(`Response fails: ${err}`);
})
}
scroller = new Scroller();
@State inputText:string=''
build() {
Column(){
Text().height(20).width('100%').backgroundColor($r('app.color.home_gray'))
if (this.isEmptyViewVisible){
EmptyViewComp({promptText:this.empty,isVisibility:this.isEmptyViewVisible}).layoutWeight(1)
}
else
{
List({ scroller: this.scroller }) {
ForEach(this.data, (item: StopOutPatientList, index) => {
ListItem() {
ItemCompStop({item:item,deleteUuid:this.deleteUuid,delete:this.delete})
}
})
}
.width('100%')
.divider({
strokeWidth: 5,
})
.edgeEffect(EdgeEffect.None)
.layoutWeight(1).clip(true)
}
// Column()
// {
// Text('发布新的停诊').height(42).width(168).fontSize(17)
// .backgroundColor($r('app.color.top_title'))
// .fontColor($r('app.color.white'))
// .textAlign(TextAlign.Center)
// .borderRadius(4)
// .margin({top:8})
//
// }
// .width('100%')
// .height(57)
// .backgroundColor(Color.White)
}
.width('100%')
.height('100%')
.backgroundColor($r('app.color.home_gray'))
}
deleteStopOutPatient() {
this.dialog.open()
const hashMap: HashMap<string, string> = new HashMap();
hashMap.set('uuid',this.deleteUuid)
hdHttp.httpReq<string>(BasicConstant.deleteStopOutPatient,hashMap).then(async (res: HdResponse<string>) => {
this.dialog.close();
let json:BaseBean = JSON.parse(res+'') as BaseBean;
if(json.code == '200') {
this.getList();
} else {
promptAction.showToast({ message: json.message, duration: 1000 })
}
}).catch((err: BusinessError) => {
this.dialog.close();
console.info(`Response fails: ${err}`);
})
}
}

View File

@ -0,0 +1,175 @@
import { TabBarCompModel } from '../model/TabBarCompModel'
import { BasicConstant, hdHttp,HdNav, HdResponse } from '@itcast/basic'
import { ListCompPublic } from '../components/ListCompPublic'
import { ListCompMany } from '../components/ListCompMany'
import { StopNoticeComp } from './StopNoticeComp'
import { HMRouterMgr } from '@hadss/hmrouter'
import { HashMap } from '@kit.ArkTS'
import { BusinessError } from '@kit.BasicServicesKit'
import { PatientNoticeModel } from '../model/PatientNoticeModel'
import { promptAction } from '@kit.ArkUI'
import { ArrangementsComp } from './ArrangementsComp'
@Component
export struct TabBarOutComp {
@StorageProp('bottomHeight')
bottomHeight: number = 0
@Link activeIndex: number
@State note:string=''
@State uuid:string=''
@State textInfo:string='发布新的停诊'
@State stopnum: number = 0
aboutToAppear() {
this.mailanNoticeGet()
}
@Builder
TabBarBuilder(item: TabBarCompModel, index: number) {
Row() {
Text(item.label)
.fontSize(16)
.fontColor(this.activeIndex === index ? $r('app.color.top_title'):$r('app.color.common_gray_03') )
.animation({ duration: 300 })
.textAlign(TextAlign.Center)
.layoutWeight(1)
if (index < TabBarItems.length - 1) {
// 竖线
Text('|').fontColor($r('app.color.common_gray_02')) // 可选:左右留点间距
}
}
}
build() {
RelativeContainer()
{
Column()
{
HdNav({ title: '出/停诊公告', showLeftIcon: true, showRightIcon: false})
Tabs({
index: this.activeIndex
}) {
ForEach(TabBarItems, (item: TabBarCompModel, index: number) => {
TabContent() {
if (index==0)
{
StopNoticeComp({stopnum:this.stopnum})
}
else if(index==1)
{
ArrangementsComp()
}
}
.tabBar(this.TabBarBuilder(item, index))
})
}
.layoutWeight(1)
.divider({ strokeWidth: $r('app.float.common_border_width'), color: $r('app.color.common_gray_border') })
.barPosition(BarPosition.Start)
.barHeight(50)
.scrollable(false)
.onTabBarClick((index) => {
this.activeIndex = index
if (index==0)
{
this.textInfo='发布新的停诊'
}
else if(index==1)
{
this.textInfo='增加门诊安排'
}
})
Column()
{
Text(this.textInfo).height(42).width(168).fontSize(17)
.backgroundColor($r('app.color.top_title'))
.fontColor($r('app.color.white'))
.textAlign(TextAlign.Center)
.borderRadius(4)
.margin({top:8})
}
.width('100%')
.height(57)
.backgroundColor(Color.White)
.onClick(() => {
if (this.activeIndex==0)
{
if(this.stopnum==2)
{
promptAction.showToast({ message: "有效停诊公告最多只能两个", duration: 1000 })
}
else
{
HMRouterMgr.push({ pageUrl: 'ReleaseOutpatient' })
}
}
else if(this.activeIndex==1)
{
HMRouterMgr.push({ pageUrl: 'AddOutpatient' })
}
})
}
Image($r('app.media.send_feed')).width(50).height(50)
.alignRules({
right: { anchor: "__container__", align: HorizontalAlign.End },
bottom:{ anchor: "__container__", align:VerticalAlign.Bottom}
})
.margin({bottom:100,right:30})
.onClick(() => {
HMRouterMgr.push({ pageUrl: 'OutpatientInformation' , param: {
note:this.note,
uuid:this.uuid
} })
})
}
}
mailanNoticeGet() {
const hashMap: HashMap<string, string> = new HashMap();
hdHttp.httpReq<string>(BasicConstant.mailanNoticeGet,hashMap).then(async (res: HdResponse<string>) => {
let json:PatientNoticeModel = JSON.parse(res+'') as PatientNoticeModel;
if(json.code == '200') {
this.uuid=json.data.uuid
this.note=json.data.notice
} else {
}
}).catch((err: BusinessError) => {
console.info(`Response fails: ${err}`);
})
}
}
export const TabBarItems: TabBarCompModel[] = [
{
label: '停诊公告'
},
{
label: '门诊安排'
}
]

View File

@ -0,0 +1,38 @@
import { OutpatientComp } 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
@Component
struct OutpatientPage {
modifier: NavModifier = new NavModifier();
build() {
RelativeContainer() {
HMNavigation({
navigationId:"OutpatientPageNavigation",
homePageUrl:'OutpatientPage',
options:{
standardAnimator:HMDefaultGlobalAnimator.STANDARD_ANIMATOR,
dialogAnimator:HMDefaultGlobalAnimator.DIALOG_ANIMATOR,
modifier:this.modifier
}
})
{
OutpatientComp()
}
}
.height('100%')
.width('100%')
}
}

View File

@ -43,7 +43,7 @@
"pages/Netease/MyOpinionPage",
"pages/PatientsPage/GroupManagementPage",
"pages/WebView/WebPageSnapshot",
"pages/VideoPage/PLVMediaPlayerOnlyVideoPage"
"pages/VideoPage/PLVMediaPlayerOnlyVideoPage",
"pages/Netease/OutpatientPage"
]
}