UNPKG

@hzg0304/clinical-template-editor

Version:

一个基于 React 和 TipTap 构建的临床模板编辑器组件,专为医疗行业设计

302 lines (294 loc) 9.73 kB
import React from 'react'; /** * @AI-Generated * 临床文档模板变量配置 */ interface TemplateVariable { name: string; placeholder: string; } declare global { interface Window { updateTemplateVariables?: (variables: TemplateVariable[]) => void; onTemplateSaved?: (data: any) => void; __EDITOR_MODE__?: string; __ACTIVE_INPUT_ID?: string; __ACTIVE_INPUT_ELEMENT?: HTMLInputElement | HTMLTextAreaElement; __ACTIVE_INPUT_SELECTION?: { start: number | null; end: number | null; text: string; }; } } interface RecordData { id?: string; templateName: string; content: string; variableValues: Record<string, string>; metaValues: Record<string, any>; saveTime: string; patientInfo?: { name?: string; admissionNumber?: string; department?: string; }; } interface RecordInfo { id: string; templateName: string; saveTime: string; patientInfo?: { name?: string; admissionNumber?: string; department?: string; }; } interface TemplateInfo { id: string; name: string; type: string; description: string; variables: string[] | Array<{ name: string; placeholder: string; type?: string; }>; saveTime?: string; timestamp?: string; headerFooter?: any; createTime?: string; createdAt?: string; updatedAt?: string; } interface ClinicalTemplateEditorRef { getContent: (format?: 'html' | 'json' | 'markdown') => string; setContent: (content: string, format?: 'html' | 'json' | 'markdown') => void; getHtmlWithStyle: () => string; appendHtml: (html: string, options?: { pageBreak?: boolean; }) => void; getVariableValues: () => Record<string, string>; setVariableValues: (values: Record<string, string>) => void; getTemplateVariables: (templateName: string) => TemplateVariable[]; getFieldValueById: (id: string) => any; getMode: () => 'readonly' | 'form' | 'design'; setMode: (mode: 'readonly' | 'form' | 'design') => void; setReadOnly: (isReadOnly: boolean) => void; getAllowCopyPaste: () => boolean; setAllowCopyPaste: (allow: boolean) => void; getTemplateList: () => TemplateInfo[]; selectTemplate: (templateName: string) => Promise<boolean>; getCurrentTemplate: () => string; switchTemplate: (templateName: string) => void; createTemplate: (templateData: { name: string; type?: string; description?: string; variables?: string[]; content?: any; }) => Promise<boolean>; saveTemplate: (templateData: { name: string; type?: string; description?: string; variables?: string[]; content?: any; }) => Promise<boolean>; updateTemplate: (templateName: string, templateData: { name?: string; type?: string; description?: string; variables?: string[]; content?: any; }) => Promise<boolean>; deleteTemplate: (templateName: string) => Promise<boolean>; getRecordData: () => RecordData; setRecordData: (data: RecordData) => void; saveRecord: () => void; getSavedRecords: () => RecordInfo[]; loadRecord: (recordId: string) => Promise<boolean>; deleteRecord: (recordId: string) => boolean; getBindObject: (id?: string) => Record<string, any>; setBindObject: (obj: any, id?: string) => void; getMetaObject?: (id?: string) => Record<string, any>; setMetaObject?: (data: Record<string, any>, id?: string) => void; getSelectedText: () => string; replaceSelectedText: (newText: string) => boolean; exportAs: (format: 'html' | 'pdf' | 'word') => Promise<Blob>; showPreview: () => void; print: () => void; printPreview: () => void; printWithOptions: (options?: { includeHeader?: boolean; includeFooter?: boolean; pageSize?: 'A4' | 'A3' | 'Letter'; orientation?: 'portrait' | 'landscape'; margins?: string; }) => void; control?: { insertField: (type: string, id?: string | null, attributes?: Record<string, any>) => void; insertRadioGroup: (id: string, data: Record<string, string>, newline?: boolean) => void; insertCheckboxGroup: (id: string, data: Record<string, string>, newline?: boolean) => void; insertSignature: (data?: string | null, id?: string, attributes?: Record<string, any>) => void; insertImage: (id: string, src?: string, attributes?: Record<string, any>) => void; }; calculate?: { registerFunction: (name: string, fn: (...args: any[]) => any) => void; runExpression: (expression: string, context?: Record<string, any>) => any; }; menstruation?: { getBindData: (id: string) => any; setBindData: (data: any, id: string) => void; updateFromText: (text: string, id?: string) => boolean; updateFromLatex: (latex: string, id?: string) => boolean; }; temperatureChart?: { initializeChart: (config: { id: string; patientName: string; patientAge?: string; patientGender?: string; inDate: string; outDate: string; diagnosis: string; department: string; bedNumber: string; medicalNumber: string; days: number; bindVariable?: string; }) => void; getChartData: (id: string) => any; setChartData: (data: any, id: string) => void; updatePatientInfo: (info: { name?: string; age?: string; gender?: string; diagnosis?: string; department?: string; bedNumber?: string; medicalNumber?: string; }, id: string) => void; }; execCommand: (command: string, params?: any) => any; validate?: () => boolean; setTableData?: (tableId: string, datalist: any[]) => void; getRevision?: () => any[]; getFieldValue?: (field: HTMLElement) => any; /** * 通过文件导入并绑定数据到模板控件 * @param file 要导入的数据文件 */ bindDataFromFile: (file: File) => Promise<void>; bindDataFromJSON: (json: string) => void; } interface ClinicalTemplateEditorProps { initialVariables?: Record<string, string>; templates?: TemplateInfo[]; currentTemplateId?: string; onTemplateChange?: (templateId: string) => void; disableCopyPaste?: boolean; [key: string]: any; } declare const ClinicalTemplateEditor: React.ForwardRefExoticComponent<Omit<ClinicalTemplateEditorProps, "ref"> & React.RefAttributes<ClinicalTemplateEditorRef>>; declare function exportHtmlFromJson(json: any, fileName?: string, mockData?: Record<string, any>): void; interface NewTemplateModalProps { show: boolean; newTemplateName: string; setNewTemplateName: (v: string) => void; newTemplateType: string; setNewTemplateType: (v: string) => void; newTemplateDesc: string; setNewTemplateDesc: (v: string) => void; newTemplateVars: string; setNewTemplateVars: (v: string) => void; importedVariables: Array<{ name: string; placeholder: string; type?: string; description?: string; }>; setImportedVariables: (v: Array<{ name: string; placeholder: string; type?: string; description?: string; }>) => void; onCancel: () => void; onSave: () => void; } declare const NewTemplateModal: React.FC<NewTemplateModalProps>; interface ChartConfig { width: number; height: number; tempMin: number; tempMax: number; pulseMin: number; pulseMax: number; gridCols: number; gridRows: number; chartStartY: number; chartHeight: number; } interface PatientData { name: string; age?: string; gender?: string; inDate: string; outDate: string; diag: string; dept: string; bed: string; medicalNo: string; dates: string[]; times: string[]; hospitalDays: (string | number)[]; temperature: (number | string | null)[][]; pulse: (number | null)[][]; heartRate: (number | null)[][]; breath: (number | null)[]; bloodPressure: (string | null)[]; intake: (string | null)[]; output: (string | null)[]; bowel: (string | null)[]; urine: (string | null)[]; height: (string | null)[]; weight: (string | null)[]; allergy: (string | null)[]; notes?: string; tempType?: string; coolingType?: string; } interface HospitalInfo { name: string; department?: string; address?: string; phone?: string; logo?: string; } interface TemperatureChartConfig { patientName: string; patientAge?: string; patientGender?: string; inDate: string; outDate: string; diagnosis: string; department: string; bedNumber: string; medicalNumber: string; days: number; } /** * 生成默认的体温单数据 * @param config 体温单配置参数 * @returns 完整的患者数据对象 */ declare const generateDefaultTemperatureChartData: (config: TemperatureChartConfig) => PatientData; /** * 创建空的体温单数据结构 * @param config 体温单配置参数 * @returns 空的患者数据对象 */ declare const createEmptyTemperatureChartData: (config: TemperatureChartConfig) => PatientData; export { ClinicalTemplateEditor, NewTemplateModal, createEmptyTemperatureChartData, exportHtmlFromJson, generateDefaultTemperatureChartData }; export type { ChartConfig, ClinicalTemplateEditorRef, HospitalInfo, PatientData, TemperatureChartConfig };