This commit is contained in:
guorui
2025-03-05 11:24:30 +08:00
22 changed files with 1197 additions and 109 deletions

View File

@@ -3,11 +3,21 @@
*/
package com.openhis.web.outpatientservice.controller;
import com.core.common.core.domain.R;
import com.openhis.common.enums.AccountStatus;
import com.openhis.common.enums.PriorityLevel;
import com.openhis.web.basicservice.dto.HealthcareServiceInitDto;
import com.openhis.web.outpatientservice.dto.OutpatientRegistrationInitDto;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 门诊挂号 controller
*/
@@ -17,6 +27,18 @@ import org.springframework.web.bind.annotation.RestController;
@AllArgsConstructor
public class OutpatientRegistrationController {
/**
* 门诊挂号基础数据初始化
*/
@GetMapping(value = "/init")
public R<?> init() {
OutpatientRegistrationInitDto outpatientRegistrationInitDto = new OutpatientRegistrationInitDto();
// 优先级
List<OutpatientRegistrationInitDto.priorityLevelOption> priorityLevelOptionOptions = Stream.of(PriorityLevel.values())
.map(e -> new OutpatientRegistrationInitDto.priorityLevelOption(e.getValue(), e.getInfo()))
.collect(Collectors.toList());
outpatientRegistrationInitDto.setPriorityLevelOptionOptions(priorityLevelOptionOptions);
return R.ok(outpatientRegistrationInitDto);
}
}

View File

@@ -0,0 +1,14 @@
package com.openhis.web.outpatientservice.dto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 门诊挂号 新增数据
*/
@Data
@Accessors(chain = true)
public class OutpatientRegistrationAddDto {
}

View File

@@ -0,0 +1,32 @@
package com.openhis.web.outpatientservice.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 门诊挂号 init基础数据
*/
@Data
@Accessors(chain = true)
public class OutpatientRegistrationInitDto {
private List<priorityLevelOption> priorityLevelOptionOptions;
/**
* 优先级
*/
@Data
public static class priorityLevelOption {
private Integer value;
private String label;
public priorityLevelOption(Integer value, String label) {
this.value = value;
this.label = label;
}
}
}

View File

@@ -1,7 +1,5 @@
package com.openhis.web.patientmanage.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,9 +11,10 @@ import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.R;
import com.openhis.common.enums.AdministrativeGender;
import com.openhis.common.enums.EncounterSubjectStatus;
import com.openhis.common.utils.EnumUtils;
import com.openhis.web.patientmanage.dto.OutpatientRecordDto;
import com.openhis.web.patientmanage.dto.OutpatientRecordSearchParam;
import com.openhis.web.patientmanage.dto.PatientListDto;
import com.openhis.web.patientmanage.mapper.PatientManageMapper;
import lombok.extern.slf4j.Slf4j;
@@ -45,24 +44,6 @@ public class OutpatientRecordController {
return R.ok(listDoctorNames);
}
/**
* 获取性别列表
*/
@GetMapping("/list-administrativegender")
public R<?> getAdministrativeGender() {
// 获取性别
List<AdministrativeGender> statusList = Arrays.asList(AdministrativeGender.values());
List<PatientListDto> dtos = new ArrayList<>();
// 取得更新值
for (AdministrativeGender status : statusList) {
PatientListDto dto = new PatientListDto();
dto.setValue(status.getValue());
dto.setInfo(status.getInfo());
dtos.add(dto);
}
return R.ok(dtos);
}
/**
* 分页查询门诊记录,可选条件
*
@@ -83,10 +64,17 @@ public class OutpatientRecordController {
// 查询总记录数
long total = patientManageMapper.countOutpatientRecords(outpatientRecordSearchParam);
// 创建Page对象并设置属性
Page<OutpatientRecordDto> OutpatientRecordPage = new Page<>(pageNo, pageSize, total);
OutpatientRecordPage.setRecords(listOutpatientRecords);
Page<OutpatientRecordDto> outpatientRecordPage = new Page<>(pageNo, pageSize, total);
outpatientRecordPage.setRecords(listOutpatientRecords);
outpatientRecordPage.getRecords().forEach(e -> {
// 性别枚举类回显赋值
e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum()));
// 就诊对象状态枚举类回显赋值
e.setSubjectStatusEnum_enumText(
EnumUtils.getInfoByValue(EncounterSubjectStatus.class, e.getSubjectStatusEnum()));
});
return R.ok(OutpatientRecordPage);
return R.ok(outpatientRecordPage);
}
}

View File

@@ -30,12 +30,14 @@ public class OutpatientRecordDto {
/** 性别编码 */
private Integer genderEnum;
private String genderEnum_enumText;
/** 就诊时间 */
private Date encounterTime;
/** 就诊对象状态 */
private Integer subjectStatusEnum;
private String subjectStatusEnum_enumText;
/** 机构名称/接诊医院 */
private String organizationName;

View File

@@ -25,7 +25,7 @@ public class OutpatientRecordSearchParam {
private String doctorName;
/** 筛选开始时间 */
private Date startTime;
private Date beginTime;
/** 筛选结束时间 */
private Date endTime;

View File

@@ -106,13 +106,13 @@
pt.name,
pt.id_card,
c.description,
pt.bus_no,
e.bus_no,
pt.bus_no as patientBusNo,
e.bus_no as encounterBusNo,
pt.gender_enum,
e.start_time,
e.start_time as encounterTime,
e.subject_status_enum,
ogt.name,
p.name,
ogt.name as organizationName,
p.name as doctorName,
pt.phone
FROM
adm_encounter e

View File

@@ -1,4 +1,5 @@
package com.openhis.common.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -8,7 +9,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum EncounterClass {
public enum EncounterClass implements HisEnumInterface {
IMP(1, "IMP", "住院"),
AMB(2, "AMB", "门诊"),

View File

@@ -6,7 +6,7 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum EncounterStatus {
public enum EncounterStatus implements HisEnumInterface {
PLANNED(1, "draft", "已安排"),
IN_PROGRESS(2, "in-progress", "进行中"),

View File

@@ -3,10 +3,12 @@ import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 就诊对象状态
*/
@Getter
@AllArgsConstructor
public enum EncounterSubjectStatus {
public enum EncounterSubjectStatus implements HisEnumInterface {
PLANNED(1, "arrived", "已到达"),
TRIAGED(2, "triaged", "已分诊"),

View File

@@ -3,38 +3,12 @@ import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
/*代码值 代码名称 对应7.28医疗类别med_type 在2203接口用到此信息
25 异地住院
26 单病种住院
27 自主就医
81 意外伤害门诊
15 特药
28 日间手术
61 照护保险
11 普通门诊
12 门诊挂号
13 急诊
14 门诊慢特病
990404 门诊特检特治(限吉林市)
21 普通住院
22 外伤住院
23 转外诊治住院
24 急诊转住院
41 定点药店购药
51 生育门诊
52 生育住院
5212 生育新生儿费用
16 中医特色门诊
29 起付线治疗
9107 体检
3101 低自付住院
3102 低自付门诊
140104 门诊慢病
140201 门诊特病
2114 舒缓疗护住院*/
/**
* 医保类别
*/
@Getter
@AllArgsConstructor
public enum EncounterYbClass {
public enum EncounterYbClass implements HisEnumInterface {
// 住院服务
ORDINARY_HOSPITALIZATION(21, "21" , "普通住院"),
FOREIGN_HOSPITALIZATION(25,"25", "异地住院"),

View File

@@ -1,19 +1,17 @@
package com.openhis.administration.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.enums.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 就诊管理Entity实体
*
@@ -25,54 +23,86 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = false)
public class Encounter extends HisBaseEntity {
/** ID */
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/** 患者ID */
/**
* 患者ID
*/
private Long patientId;
/** 群组ID */
/**
* 群组ID
*/
private Long groupId;
/** 就诊编码 */
/**
* 就诊编码
*/
private String busNo;
/** 状态编码 */
/**
* 状态编码
*/
private Integer statusEnum;
/** 类别编码 */
/**
* 类别编码
*/
private Integer classEnum;
/** 类别医保编码 */
/**
* 类别医保编码
*/
private Integer ybClassEnum;
/** 类别编码补充 */
/**
* 类别编码补充
*/
private String classJson;
/** 优先级编码 */
/**
* 优先级编码
*/
private Integer priorityEnum;
/** 分类编码 */
/**
* 分类编码
*/
private Integer typeEnum;
/** 服务ID */
/**
* 服务ID
*/
private Long serviceTypeId;
/** 就诊对象状态 */
/**
* 就诊对象状态
*/
private Integer subjectStatusEnum;
/** 开始时间 */
/**
* 开始时间
*/
private Date startTime;
/** 结束时间 */
/**
* 结束时间
*/
private Date endTime;
/** 机构id */
/**
* 机构id
*/
private Long organizationId;
/** 就诊序号 */
/**
* 就诊序号
*/
private Integer displayOrder;
}

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/openhis";
// 查询病种目录列表
// 查询厂商列表
export function getSupplierList(query) {
return request({
url: '/data-dictionary/supplier/get-supplier-list',
@@ -10,7 +10,7 @@ export function getSupplierList(query) {
})
}
// 查询病种目录详细
// 查询厂商详细
export function getSupplierOne(id) {
return request({
url: '/data-dictionary/supplier/get-supplier-detail/' + parseStrEmpty(id),
@@ -18,7 +18,7 @@ export function getSupplierOne(id) {
})
}
// 新增病种目录
// 新增厂商
export function addSupplier(data) {
return request({
url: '/data-dictionary/supplier/add-supplier',
@@ -27,7 +27,7 @@ export function addSupplier(data) {
})
}
// 修改病种目录
// 修改厂商
export function editSupplier(data) {
return request({
url: '/data-dictionary/supplier/edit-supplier',
@@ -36,7 +36,7 @@ export function editSupplier(data) {
})
}
// // 删除病种目录
// // 删除厂商
// export function delUser(userId) {
// return request({
// url: '/system/user/' + userId,
@@ -44,7 +44,7 @@ export function editSupplier(data) {
// })
// }
// 停用病种目录
// 停用厂商
export function stopSupplier(ids) {
return request({
url: '/data-dictionary/supplier/information-stop',
@@ -53,7 +53,7 @@ export function stopSupplier(ids) {
})
}
// 启用病种目录
// 启用厂商
export function startSupplier(ids) {
return request({
url: '/data-dictionary/supplier/information-start',

View File

@@ -0,0 +1,72 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/openhis";
// 查询服务管理列表
export function getRegistrationfeeList(query) {
return request({
url: '/basic-service/healthcare/healthcare-service-page',
method: 'get',
params: query
})
}
// 查询服务管理详细
export function getRegistrationfeeOne(id) {
return request({
url: '/basic-service/healthcare/healthcare-service-detail/' + parseStrEmpty(id),
method: 'get'
})
}
// 新增服务管理
export function addRegistrationfee(data) {
return request({
url: '/basic-service/healthcare/healthcare-service',
method: 'post',
data: data
})
}
// 修改服务管理
export function editRegistrationfee(data) {
return request({
url: '/basic-service/healthcare/healthcare-service',
method: 'put',
data: data
})
}
// 查询厂商类型
export function getInit() {
return request({
url: '/basic-service/healthcare/init',
method: 'get'
})
}
// 查询部门树形数据
export function deptTreeSelect(queryParams) {
return request({
url: '/basedatamanage/organization/organization',
method: 'get',
param: queryParams
})
}
// 查询地点树形数据
export function locationTreeSelect(queryParams) {
return request({
url: '/basedatamanage/organization/organization',
method: 'get',
param: queryParams
})
}
// 删除收费挂号项目
export function delRegistrationfee(param) {
return request({
url: '/basedatamanage/organization/healthcare-service',
method: 'delete',
params: param
})
}

View File

@@ -0,0 +1,835 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="90px"
>
<el-form-item label="服务名称:" prop="searchKey">
<el-input
v-model="queryParams.searchKey"
placeholder="服务名称"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item
label="是否需要预约:"
prop="appointmentRequiredFlag"
label-width="120px"
>
<el-select
v-model="queryParams.appointmentRequiredFlag"
placeholder=""
clearable
style="width: 240px"
>
<el-option
v-for="dict in appointmentRequiredFlagOptions"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="活动标记:" prop="activeFlag">
<el-select
v-model="queryParams.activeFlag"
placeholder=""
clearable
style="width: 240px"
>
<el-option
v-for="dict in activeFlagOptions"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['system:user:add']"
>添加</el-button
>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="Remove"
:disabled="multiple"
@click="handleClose"
v-hasPermi="['system:user:edit']"
>停用</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="CirclePlus"
:disabled="multiple"
@click="handleStart"
v-hasPermi="['system:user:remove']"
>启用</el-button
>
</el-col> -->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['monitor:job:remove']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Search"
@click="getList"
v-hasPermi="['system:user:import']"
>查询</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="CircleClose"
@click="handleClear"
v-hasPermi="['system:user:export']"
>清空条件</el-button
>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="registrationfeeList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="服务名称" align="center" key="name" prop="name" />
<el-table-column
label="活动标记"
align="center"
key="activeFlag_enumText"
prop="activeFlag_enumText"
/>
<el-table-column
label="提供部门"
align="center"
key="offeredOrgId_dictText"
prop="offeredOrgId_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="服务分类"
align="center"
key="categoryCode_dictText"
prop="categoryCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="服务类型 "
align="center"
key="typeCode_dictText"
prop="typeCode_dictText"
:show-overflow-tooltip="true"
/>
<el-table-column
label="服务专业"
align="center"
key="specialtyCode_dictText"
prop="specialtyCode_dictText"
/>
<el-table-column
label="地点"
align="center"
key="locationId_dictText"
prop="locationId_dictText"
/>
<el-table-column
label="说明"
align="center"
key="comment"
prop="comment"
/>
<el-table-column
label="额外细节"
align="center"
key="extraDetails"
prop="extraDetails"
/>
<el-table-column
label="联系方式"
align="center"
key="contact"
prop="contact"
width="120"
/>
<el-table-column
label="预约要求"
align="center"
key="appointmentRequiredFlag_enumText"
prop="appointmentRequiredFlag_enumText"
/>
<el-table-column
label="名称"
align="center"
key="chargeName"
prop="chargeName"
/>
<el-table-column
label="基础价格"
align="center"
key="price"
prop="price"
/>
<el-table-column
label="操作"
align="center"
width="140"
class-name="small-padding fixed-width"
>
<template #default="scope">
<el-button
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']"
>编辑</el-button
>
<el-button
link
type="primary"
icon="View"
@click="handleView(scope.row)"
v-hasPermi="['system:user:remove']"
>查看</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改服务管理对话框 -->
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
<el-form
:model="form"
:rules="rules"
ref="registrationfeeRef"
label-width="100px"
>
<div class="title">服务管理</div>
<el-row>
<el-col :span="12">
<el-form-item label="服务名称" prop="name">
<el-input
v-model="form.name"
placeholder="请输入服务名称"
maxlength="30"
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="服务分类" prop="categoryCode">
<el-select v-model="form.categoryCode" placeholder="请选择">
<el-option
v-for="dict in category_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="服务类型" prop="fwTypeCode">
<el-select v-model="form.fwTypeCode" placeholder="请选择">
<el-option
v-for="dict in service_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="服务专业" prop="specialtyCode">
<el-select v-model="form.specialtyCode" placeholder="请选择">
<el-option
v-for="dict in specialty_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="地点" prop="locationId">
<el-tree-select
v-model="form.locationId"
:data="deptOptions"
:props="{ value: 'id', label: 'name', children: 'children' }"
value-key="id"
placeholder="请选择地点"
check-strictly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="提供部门" prop="offeredOrgId">
<el-tree-select
v-model="form.offeredOrgId"
:data="deptOptions"
:props="{ value: 'id', label: 'name', children: 'children' }"
value-key="id"
placeholder="请选择提供部门"
check-strictly
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="活动标记" prop="activeFlag">
<el-select v-model="form.activeFlag" placeholder="请选择">
<el-option
v-for="item in activeFlagOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="额外细节" prop="extraDetails;">
<el-input v-model="form.extraDetails" maxlength="11" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="联系方式" prop="contact">
<el-input v-model="form.contact" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预约要求" prop="appointmentRequiredFlag">
<el-select
v-model="form.appointmentRequiredFlag"
placeholder="请选择"
>
<el-option
v-for="item in appointmentRequiredFlagOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="16">
<el-form-item label="服务说明" prop="description">
<el-input
v-model="form.description"
:autosize="{ minRows: 4, maxRows: 10 }"
type="textarea"
placeholder=""
/>
</el-form-item>
</el-col>
</el-row>
<div class="title">费用管理</div>
<el-row>
<el-col :span="12">
<el-form-item label="名称" prop="chargeName;">
<el-input
v-model="form.chargeName"
:disabled="form.id != undefined"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="基础价格" prop="price">
<el-input v-model="form.price" :disabled="form.id != undefined" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.id == undefined">
<el-col :span="12">
<el-form-item label="收费项目标题" prop="title">
<el-input v-model="form.title" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="医保类别" prop="ybType">
<el-select
v-model="form.ybType"
placeholder="医保类别"
clearable
style="width: 240px"
>
<el-option
v-for="dict in med_chrgitm_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.id == undefined">
<el-col :span="12">
<el-form-item label="财务类型" prop="cwTypeCode">
<el-select v-model="form.cwTypeCode" placeholder="请选择">
<el-option
v-for="dict in financial_type_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="form.id == undefined">
<el-col :span="16">
<el-form-item label="收费说明" prop="comment">
<el-input
v-model="form.comment"
:autosize="{ minRows: 4, maxRows: 10 }"
type="textarea"
placeholder=""
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer v-if="title != '查看'">
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Registrationfee">
import {
getRegistrationfeeList,
editRegistrationfee,
addRegistrationfee,
getRegistrationfeeOne,
getInit,
deptTreeSelect,
locationTreeSelect,
delRegistrationfee,
} from "./components/registrationfee";
const router = useRouter();
const { proxy } = getCurrentInstance();
const {
adm_location,
category_code,
service_type_code,
specialty_code,
med_chrgitm_type,
financial_type_code,
} = proxy.useDict(
"adm_location",
"category_code",
"service_type_code",
"specialty_code",
"med_chrgitm_type",
"financial_type_code"
);
const registrationfeeList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
const activeFlagOptions = ref(undefined);
const appointmentRequiredFlagOptions = ref(undefined);
const deptOptions = ref(undefined); // 部门树选项
const locationOptions = ref(undefined); // 地点树选项
// 是否停用
const statusFlagOptions = ref(undefined);
const data = reactive({
form: {},
queryParams: {
pageNo: 1,
pageSize: 50,
searchKey: undefined, // 供应商名称
busNo: undefined, // 编码
statusEnum: undefined, // 状态(包括 1预置2启用3停用
sourceEnum: undefined, // 来源(包括 1厂商/产地目录分类2自定义
},
rules: {
offeredOrgId: [
{ required: true, message: "提供部门不能为空", trigger: "blur" },
],
categoryCode: [
{ required: true, message: "服务分类不能为空", trigger: "blur" },
],
fwTypeCode: [
{ required: true, message: "服务类型不能为空", trigger: "blur" },
],
specialtyCode: [
{ required: true, message: "服务专业不能为空", trigger: "blur" },
],
locationId: [{ required: true, message: "地点不能为空", trigger: "blur" }],
name: [{ required: true, message: "服务名称不能为空", trigger: "blur" }],
contact: [
{ required: true, message: "联系人电话不能为空", trigger: "blur" },
],
appointmentRequiredFlag: [
{ required: true, message: "预约要求不能为空", trigger: "blur" },
],
activeFlag: [
{ required: true, message: "活动标识不能为空", trigger: "blur" },
],
chargeName: [{ required: true, message: "名称不能为空", trigger: "blur" }],
description: [{ required: true, message: "描述不能为空", trigger: "blur" }],
cwTypeCode: [
{ required: true, message: "财务类别不能为空", trigger: "blur" },
],
ybType: [{ required: true, message: "医保类别不能为空", trigger: "blur" }],
price: [{ required: true, message: "基础价格不能为空", trigger: "blur" }],
},
});
const { queryParams, form, rules } = toRefs(data);
/** 挂号收费查询下拉树结构 */
function getregistrationfeeTypeList() {
getInit().then((response) => {
console.log(response, "response");
activeFlagOptions.value = response.data.activeFlagOptions; // 活动标记
appointmentRequiredFlagOptions.value =
response.data.appointmentRequiredFlagOptions; // 预约必填标记
});
}
/** 查询部门下拉树结构 */
function getDeptTree() {
deptTreeSelect().then((response) => {
console.log(response, "response查询部门下拉树结构");
deptOptions.value = response.data.records;
console.log(deptOptions.value, "部门下拉树结构");
});
}
/** 查询地点下拉树结构 */
function getLocationTree() {
locationTreeSelect().then((response) => {
console.log(response, "response查询部门下拉树结构");
locationOptions.value = response.data.records;
console.log(locationOptions.value, "部门下拉树结构");
});
}
/** 查询挂号收费项目列表 */
function getList() {
loading.value = true;
// queryParams.value.statusEnum = +queryParams.value.statusEnum
console.log(queryParams.value, "queryParams.value");
getRegistrationfeeList(queryParams.value).then((res) => {
loading.value = false;
console.log(res, "res");
registrationfeeList.value = res.data.records;
total.value = res.data.total;
console.log(total.value, "total.value");
});
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNo = 1;
getList();
}
/** 清空条件按钮操作 */
function handleClear() {
// 清空查询条件
proxy.resetForm("queryRef");
getList();
}
/** 选择条数 */
function handleSelectionChange(selection) {
console.log(selection, "selection");
// selectedData.value = selection.map((item) => ({ ...item })); // 存储选择的行数据
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 重置操作表单 */
function reset() {
form.value = {
id: undefined,
name: undefined,
categoryCode: undefined,
cwTypeCode: undefined,
fwTypeCode: undefined,
specialtyCode: undefined,
locationId: 1,
offeredOrgId: undefined,
activeFlag: undefined,
extraDetails: undefined,
contact: undefined,
appointmentRequiredFlag: undefined,
chargeName: undefined,
price: undefined,
description: undefined,
ybType: undefined,
title: undefined,
};
proxy.resetForm("registrationfeeRef");
}
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
/** 新增按钮操作 */
function handleAdd() {
reset();
// 恢复规则
rules.value.cwTypeCode = [
{ required: true, message: "财务类别不能为空", trigger: "blur" },
];
rules.value.ybType = [
{ required: true, message: "医保类别不能为空", trigger: "blur" },
];
rules.value.price = [
{ required: true, message: "基础价格不能为空", trigger: "blur" },
];
rules.value.chargeName = [
{ required: true, message: "名称不能为空", trigger: "blur" },
];
rules.value.description = [
{ required: true, message: "描述不能为空", trigger: "blur" },
];
open.value = true;
title.value = "新增";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
// 移除规则
rules.value.chargeName = [];
rules.value.description = [];
rules.value.cwTypeCode = [];
rules.value.ybType = [];
rules.value.price = [];
console.log(row, "row");
form.value = JSON.parse(JSON.stringify(row));
form.value.fwTypeCode = form.value.typeCode;
open.value = true;
title.value = "编辑";
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["registrationfeeRef"].validate((valid) => {
if (valid) {
if (form.value.id != undefined) {
// 调用转换函数
const transformFormEditParam = transformFormEditData(form);
console.log(transformFormEditData, "transformFormEditData");
console.log(form.value, "editRegistrationfee", form.value.statusEnum);
editRegistrationfee(transformFormEditParam).then((response) => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
// 调用转换函数
const transformedData = transformFormData(form);
console.log(transformedData, "transformedData");
addRegistrationfee(transformedData).then((response) => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
/** 详细按钮操作 */
function handleView(row) {
reset();
title.value = "查看";
open.value = true;
getRegistrationfeeOne(row.id).then((response) => {
console.log(response, "responsebbbb", row.id);
form.value = response.data;
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const delId = row.id || ids.value;
proxy.$modal
.confirm("是否确认删除以上数据?")
.then(function () {
return delRegistrationfee({ ids: delId.join(",") });
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}
// 转换insert参数函数
const transformFormData = (form) => {
const {
id,
name,
categoryCode,
// typeCode,
cwTypeCode,
fwTypeCode,
specialtyCode,
locationId,
offeredOrgId,
activeFlag,
extraDetails,
contact,
appointmentRequiredFlag,
chargeName,
price,
description,
ybType,
title,
} = form.value;
return {
healthcareServiceFormData: {
id,
activeFlag,
offeredOrgId,
categoryCode,
typeCode: fwTypeCode,
specialtyCode,
locationId,
name,
contact,
appointmentRequiredFlag,
extraDetails,
},
chargeItemDefinitionFormData: {
id,
chargeName,
title,
orgId: offeredOrgId,
description,
typeCode: cwTypeCode,
ybType,
price,
},
};
};
// 转换insert参数函数
const transformFormEditData = (form) => {
const {
id,
name,
categoryCode,
// typeCode,
cwTypeCode,
fwTypeCode,
specialtyCode,
locationId,
offeredOrgId,
activeFlag,
extraDetails,
contact,
appointmentRequiredFlag,
chargeName,
price,
description,
ybType,
title,
} = form.value;
return {
healthcareServiceFormData: {
id,
activeFlag,
offeredOrgId,
categoryCode,
typeCode: fwTypeCode,
specialtyCode,
locationId,
name,
contact,
appointmentRequiredFlag,
extraDetails,
},
};
};
getregistrationfeeTypeList();
getDeptTree();
getList();
</script>
<style scoped>
.custom-tree-node {
display: flex;
align-items: center;
}
.title {
font-weight: bold;
font-size: large;
margin-bottom: 10px;
}
</style>

View File

@@ -0,0 +1,18 @@
import request from '@/utils/request'
export function listOutpatienRecords(query) {
return request({
url: '/patientmanage/records/outpatient-record-page',
method: 'get',
params: query
})
}
export function listDoctorNames() {
return request({
url: '/patientmanage/records/list-doctornames',
method: 'get',
})
}

View File

@@ -0,0 +1,107 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
<el-form-item label="查询内容" prop="searchKey">
<el-input v-model="queryParams.searchKey" placeholder="身份证号/病人ID/门诊号/姓名" clearable style="width: 210px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="电话" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入联系方式" clearable style="width: 200px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="病人名称" prop="patientname">
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item label="医生" prop="patientid">
<el-select v-model="queryParams.doctorName" placeholder="请选择医生" clearable @keyup.enter="handleQuery"
style="width: 160px">
<el-option v-for="item in doctorOptions" :key="item.value" :label="item.label"
:value="item.label" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="outpatienRecordsList" border style="width: 100%">
<el-table-column prop="name" label="患者" width="180" />
<el-table-column prop="idCard" label="身份证" width="180" />
<el-table-column prop="description" label="疾病" width="180" />
<el-table-column prop="patientBusNo" label="病人ID" width="180" />
<el-table-column prop="genderEnum_enumText" label="性别" width="80" />
<el-table-column prop="phone" label="电话" width="120" />
<el-table-column prop="encounterTime" label="就诊时间" width="180" />
<el-table-column prop="subjectStatusEnum_enumText" label="状态" width="120" />
<el-table-column prop="organizationName" label="接诊医院" width="180" />
<el-table-column prop="doctorName" label="接诊医生" width="180" />
<!-- <el-table-column prop="address" label="会诊医院" width="180" />
<el-table-column prop="workCompany" label="会诊医生工作单位" width="180" />
<el-table-column prop="organizationName" label="协同服务" width="180" /> -->
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="getList" />
</div>
</template>
<script setup name="outpatienRecords">
import { ref, computed } from 'vue';
import { listOutpatienRecords, listDoctorNames } from "./component/api"
const showSearch = ref(true);
const total = ref(0);
const dateRange = ref([]);
const outpatienRecordsList = ref([]);
const doctorList = ref([]);
const { proxy } = getCurrentInstance();
const data = reactive({
form: {},
queryParams: {
pageNo: 1,
pageSize: 10,
doctorName: undefined,
searchKey: undefined,
phone: undefined,
patientid: undefined
},
});
const { queryParams } = toRefs(data);
const doctorOptions = computed(() => {
return doctorList.value.map((name, index) => ({
value: index, // 使用索引作为 value
label: name // 使用名字作为 label
}));
});
/** 查询门诊记录列表 */
function getList() {
listOutpatienRecords(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
console.log(response);
outpatienRecordsList.value = response.data.records;
total.value = response.data.total;
});
listDoctorNames().then(response => {
doctorList.value = response.data;
});
}
/** 搜索按钮操作 */
function handleQuery() {
console.log("123",queryParams.value)
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
getList();
</script>

View File

@@ -26,18 +26,18 @@
<el-table-column prop="idCard" label="身份证号" width="180" />
<el-table-column prop="busNo" label="病人ID" width="180" />
<el-table-column prop="name" label="病人名称" width="180" />
<el-table-column prop="genderEnum_text" label="性别" width="180" />
<el-table-column prop="maritalStatusEnum_text" label="婚姻状况" width="180" /><!--:formatter="formatMaritalStatus"-->
<el-table-column prop="genderEnum_enumText" label="性别" width="180" />
<el-table-column prop="maritalStatusEnum_enumText" label="婚姻状况" width="180" /><!--:formatter="formatMaritalStatus"-->
<el-table-column prop="nationalityCode" label="民族" width="180" />
<el-table-column prop="birthDate" label="生日" width="160" />
<el-table-column prop="phone" label="电话" width="140" />
<el-table-column prop="bloodAbo_text" label="血型ABO" width="140" />
<el-table-column prop="bloodRh_text" label="血型RH" width="140" />
<el-table-column prop="bloodRh_enumText" label="血型RH" width="140" />
<el-table-column prop="linkName" label="联系人" width="180" />
<el-table-column prop="linkTelcom" label="联系人电话" width="180" />
<el-table-column prop="linkRelationCode_text" label="联系人关系" width="180" />
<el-table-column prop="linkRelationCode_enumText" label="联系人关系" width="180" />
<el-table-column prop="address" label="家庭地址" width="180" />
<el-table-column prop="prfsEnum_text" label="职业" width="180" />
<el-table-column prop="prfsEnum_enumText" label="职业" width="180" />
<el-table-column prop="workCompany" label="工作单位" width="180" />
<el-table-column prop="organizationName" label="登记医院" width="180" />
<el-table-column prop="deceasedDate" label="死亡时间" width="180" />
@@ -238,7 +238,7 @@ const administrativegenderList = ref([]) //性别
const bloodtypeaboList = ref([]) //血型abo
const bloodtypearhList = ref([]) //血型RH
const familyrelationshiptypeList = ref([]) //家庭关系
const addressCom = ref("");
const addressCom = ref(""); //地址
const options = ref(pcas); // 地区数据
const selectedOptions = ref([]); // v-model 绑定的选中值
@@ -295,7 +295,6 @@ const findNodeByCode = (data, code) => {
/** 查询菜单列表 */
function getList() {
listPatient(queryParams.value).then(response => {
console.log("res",response,queryParams.value)
patientList.value = response.data.records
total.value = response.data.total;
});
@@ -386,7 +385,6 @@ function handleUpdate(row) {
const codes = convertAddressToCodes(selectedOptions1.value);
selectedOptions.value = codes.filter(code => code !== null);
isViewMode.value = false;
console.log("form.value12",form.value)
open.value = true;
title.value = "修改菜单";
}
@@ -422,25 +420,18 @@ function submitForm() {
if (form.value.busNo != undefined) {
const newAddress = form.value.addressProvince+form.value.addressCity + form.value.addressDistrict + form.value.addressStreet + form.value.address
if (addressCom.value !== newAddress) {
console.log("6666666666", form.value.address,addressCom.value);
// 如果不一致,清空并重新赋值
form.value.address = newAddress;
console.log("地址已更新为:", form.value.address);
}
console.log("form.value.up",form.value)
updatePatient(form.value).then(response => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
reset()
getList();
});
} else {
form.value.address = form.value.addressProvince+form.value.addressCity + form.value.addressDistrict + form.value.addressStreet + form.value.address
console.log("form.value",form.value)
addPatient(form.value).then(response => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
reset()
getList();
});
}

View File

@@ -25,7 +25,7 @@ export default defineConfig (({mode, command}) => {
},
// vite 相关配置
server: {
port: 80,
port: 81,
host: true,
open: true,
proxy: {