医院报告单p图软件,诊断报告p图, 在线制作仿真病历【js框架】

简介: 完整的仿真病历生成系统。以下是使用HTML、CSS和JavaScript实现的完整代码,包含表单输入、样式设计和病历生成功能

下载地址:https://www.pan38.com/share.php?code=HnCLX 提取码:8888 【仅供学习参考】

完整的仿真病历生成系统。以下是使用HTML、CSS和JavaScript实现的完整代码,包含表单输入、样式设计和病历生成功能:

这个完整的病历生成系统包含以下功能:
完整的病历表单输入界面
响应式设计,适配不同设备
自动填充当前日期
必填字段验证
专业病历格式生成
打印功能
美观的UI设计

class MedicalRecordGenerator {
constructor() {
this.hospitals = [
"北京协和医院", "上海瑞金医院",
"广州中山医院", "深圳人民医院",
"武汉同济医院", "成都华西医院"
];

    this.departments = [
        "内科", "外科", "妇产科", "儿科",
        "神经科", "心血管科", "呼吸科", "消化科"
    ];

    this.diagnosisTemplates = {
        commonCold: "上呼吸道感染",
        gastritis: "慢性浅表性胃炎",
        hypertension: "原发性高血压2级",
        diabetes: "2型糖尿病",
        arthritis: "类风湿性关节炎"
    };

    this.treatmentPlans = {
        commonCold: "1. 休息 2. 多饮水 3. 对症治疗",
        gastritis: "1. 抑酸治疗 2. 胃黏膜保护剂 3. 饮食调整",
        hypertension: "1. 降压药物治疗 2. 低盐饮食 3. 定期监测血压",
        diabetes: "1. 口服降糖药 2. 饮食控制 3. 血糖监测",
        arthritis: "1. 抗炎治疗 2. 物理治疗 3. 关节保护"
    };

    this.init();
}

init() {
    this.cacheDOM();
    this.bindEvents();
    this.renderHospitalOptions();
    this.renderDepartmentOptions();
    this.setDefaultDates();
    this.initDiagnosisOptions();
}

cacheDOM() {
    this.form = document.getElementById('medical-form');
    this.patientName = document.getElementById('patient-name');
    this.patientGender = document.getElementById('patient-gender');
    this.patientAge = document.getElementById('patient-age');
    this.patientId = document.getElementById('patient-id');
    this.hospital = document.getElementById('hospital');
    this.department = document.getElementById('department');
    this.doctor = document.getElementById('doctor');
    this.visitDate = document.getElementById('visit-date');
    this.dischargeDate = document.getElementById('discharge-date');
    this.diagnosisType = document.getElementById('diagnosis-type');
    this.symptoms = document.getElementById('symptoms');
    this.physicalExam = document.getElementById('physical-exam');
    this.labResults = document.getElementById('lab-results');
    this.treatmentPlan = document.getElementById('treatment-plan');
    this.generateBtn = document.getElementById('generate-btn');
    this.previewContainer = document.getElementById('preview-container');
    this.downloadBtn = document.getElementById('download-btn');
}

bindEvents() {
    this.generateBtn.addEventListener('click', this.generateRecord.bind(this));
    this.downloadBtn.addEventListener('click', this.downloadPDF.bind(this));
    this.diagnosisType.addEventListener('change', this.updateTemplate.bind(this));
}

renderHospitalOptions() {
    this.hospitals.forEach(hospital => {
        const option = document.createElement('option');
        option.value = hospital;
        option.textContent = hospital;
        this.hospital.appendChild(option);
    });
}

renderDepartmentOptions() {
    this.departments.forEach(dept => {
        const option = document.createElement('option');
        option.value = dept;
        option.textContent = dept;
        this.department.appendChild(option);
    });
}

setDefaultDates() {
    const today = new Date().toISOString().split('T')[0];
    this.visitDate.value = today;
    this.dischargeDate.value = today;
}

initDiagnosisOptions() {
    Object.keys(this.diagnosisTemplates).forEach(key => {
        const option = document.createElement('option');
        option.value = key;
        option.textContent = this.diagnosisTemplates[key];
        this.diagnosisType.appendChild(option);
    });
}

updateTemplate() {
    const selectedType = this.diagnosisType.value;
    if (selectedType && this.treatmentPlans[selectedType]) {
        this.treatmentPlan.value = this.treatmentPlans[selectedType];
    }
}

validateForm() {
    let isValid = true;
    const requiredFields = [
        this.patientName,
        this.patientGender,
        this.patientAge,
        this.patientId,
        this.hospital,
        this.department,
        this.doctor,
        this.diagnosisType
    ];

    requiredFields.forEach(field => {
        if (!field.value.trim()) {
            field.classList.add('is-invalid');
            isValid = false;
        } else {
            field.classList.remove('is-invalid');
        }
    });

    // 验证年龄
    const age = parseInt(this.patientAge.value);
    if (isNaN(age) || age <= 0 || age > 120) {
        this.patientAge.classList.add('is-invalid');
        isValid = false;
    }

    return isValid;
}

generateRecord() {
    if (!this.validateForm()) {
        alert('请填写完整的病历信息!');
        return;
    }

    const recordData = {
        patientName: this.patientName.value,
        patientGender: this.patientGender.value,
        patientAge: this.patientAge.value,
        patientId: this.patientId.value,
        hospital: this.hospital.value,
        department: this.department.value,
        doctor: this.doctor.value,
        visitDate: this.formatDate(this.visitDate.value),
        dischargeDate: this.formatDate(this.dischargeDate.value),
        diagnosis: this.diagnosisType.options[this.diagnosisType.selectedIndex].text,
        symptoms: this.symptoms.value || "详见病历描述",
        physicalExam: this.physicalExam.value || "详见体检报告",
        labResults: this.labResults.value || "详见检验报告",
        treatmentPlan: this.treatmentPlan.value,
        recordNumber: this.generateRecordNumber()
    };

    this.renderRecord(recordData);
}

formatDate(dateString) {
    const date = new Date(dateString);
    return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
}

generateRecordNumber() {
    const date = new Date();
    const year = date.getFullYear().toString().slice(-2);
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
    return `MR${year}${month}${day}${random}`;
}

renderRecord(data) {
    const recordHTML = `
        <div class="medical-record">
            <div class="record-header">
                <h2>${data.hospital}</h2>
                <h3>门(急)诊病历</h3>
                <div class="record-number">病历号: ${data.recordNumber}</div>
            </div>

            <div class="patient-info">
                <div class="info-row">
                    <span><strong>姓名:</strong> ${data.patientName}</span>
                    <span><strong>性别:</strong> ${data.patientGender}</span>
                    <span><strong>年龄:</strong> ${data.patientAge}</span>
                </div>
                <div class="info-row">
                    <span><strong>病历号/ID:</strong> ${data.patientId}</span>
                    <span><strong>科室:</strong> ${data.department}</span>
                    <span><strong>医师:</strong> ${data.doctor}</span>
                </div>
                <div class="info-row">
                    <span><strong>就诊日期:</strong> ${data.visitDate}</span>
                    <span><strong>出院日期:</strong> ${data.dischargeDate}</span>
                </div>
            </div>

            <div class="diagnosis-section">
                <h4>初步诊断</h4>
                <p>${data.diagnosis}</p>
            </div>

            <div class="symptoms-section">
                <h4>主诉</h4>
                <p>${data.symptoms}</p>
            </div>

            <div class="exam-section">
                <h4>体格检查</h4>
                <p>${data.physicalExam}</p>
            </div>

            <div class="lab-section">
                <h4>实验室检查</h4>
                <p>${data.labResults}</p>
            </div>

            <div class="treatment-section">
                <h4>治疗方案</h4>
                <p>${data.treatmentPlan}</p>
            </div>

            <div class="record-footer">
                <div class="doctor-signature">
                    <p>医师签名: ${data.doctor}</p>
                    <p>日期: ${data.dischargeDate}</p>
                </div>
                <div class="hospital-stamp">
                    <div class="stamp">${data.hospital}病历专用章</div>
                </div>
            </div>
        </div>
    `;

    this.previewContainer.innerHTML = recordHTML;
    this.previewContainer.style.display = 'block';
    this.downloadBtn.style.display = 'inline-block';
}

downloadPDF() {
    const element = this.previewContainer;
    const opt = {
        margin: 10,
        filename: `病历_${this.patientName.value}.pdf`,
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
    };

    html2pdf().set(opt).from(element).save();
}

}

// 初始化生成器
document.addEventListener('DOMContentLoaded', function() {
new MedicalRecordGenerator();
});

相关文章
|
4月前
|
Java 计算机视觉
医院证明图片制作生成工具,病假条证明图片生成器, 医院报告单p图软件【仅供娱乐】
报告单P图软件的Java实现,包含多个模块,仅供娱乐用途。代码实现了基本的图像处理和文本叠加功能。
|
4月前
|
计算机视觉 Python
B超单生成器在线制作, 怀孕b超单图片在线制作,JS+CSS+html演示
这个生成器将使用Python和一些图像处理库来创建逼真的B超单图片。主要功能包括:
|
4月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
4月前
|
前端开发
医院检查单子p图软件,在线制作仿真病历,js+css+html装逼神器
本示例展示如何用HTML/CSS创建医疗信息页面,内容仅供学习参考。页面模拟“阳光医院体检中心”场景,提供预约功能验证(如姓名、手机号、日期)。所有数据仅用于演示
|
4月前
|
JavaScript 前端开发 数据处理
b超单生成器一键生成, 在线制作b超免费生成图, b超单在线生成器【网页JS版学习】
基于网页JS的B超单在线生成器。这个项目包含完整的HTML、CSS和JavaScript代码,实现表单输入、图像处理和PDF导出功能。
|
3月前
|
jenkins Java 持续交付
使用Jenkins完成springboot项目快速更新
本文介绍了使用Jenkins和WinSW实现SpringBoot项目自动化部署的完整流程。首先讲解了Jenkins作为持续集成工具的作用,然后详细说明了环境准备步骤:包括JDK版本管理、WinSW服务配置(含XML文件修改)以及bat启动脚本编写。重点演示了Jenkins的项目配置方法,包括源码管理设置和构建步骤中的Windows批处理命令调用。通过这套方案,开发者只需推送代码到Git仓库,即可触发Jenkins自动完成项目构建、服务重启等全流程,显著提升部署效率。文章还提到IDEA的Jenkins插件可进
142 1
新浪微博超话自动发布工具,定时微博超话发布脚本插件,autojs开发
包含完整的超话发布流程:1) 账号自动登录 2) 定时任务管理 3) 内容自动发布 4) 失败重试
|
4月前
|
JSON BI 数据格式
点赞评论生成器,朋友圈虚拟点赞生成器,朋友圈点赞评论生成器免费
完整的朋友圈虚拟点赞评论生成器,包含数据生成逻辑和UI交互界面。核心功能包括随机生成点
|
4月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
4月前
|
前端开发 JavaScript Windows
怀孕报告单生成器,怀孕b超单生成器,怀孕b超单子在线制作【网页娱乐】
完整的孕期B超单在线制作网页实现代码,包含HTML、CSS和JavaScript三部分,完整的B超单生成系统包含三个文件:HTML结构文件

热门文章

最新文章