提交merge1.3

This commit is contained in:
2025-12-27 15:30:40 +08:00
parent 088861f66e
commit 3c497417dc
167 changed files with 0 additions and 17577 deletions

View File

@@ -23,20 +23,12 @@
<groupId>com.core</groupId>
<artifactId>core-common</artifactId>
</dependency>
<<<<<<< HEAD
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
=======
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
>>>>>>> v1.3
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>

View File

@@ -6,15 +6,9 @@ spring:
druid:
# 主库数据源
master:
<<<<<<< HEAD:openhis-server-new/openhis-application/src/main/resources/application-prd.yml
url: jdbc:postgresql://192.168.110.252:15432/postgresql?currentSchema=hisprd&characterEncoding=UTF-8&client_encoding=UTF-8
username: postgresql
password: Jchl1528
=======
url: jdbc:postgresql://192.168.2.15:5432/openhis-xz?currentSchema=public&characterEncoding=UTF-8&client_encoding=UTF-8
username: postgres
password: root
>>>>>>> v1.3:openhis-server-new/openhis-application/src/main/resources/application-prod.yml
# 从库数据源
slave:
# 从数据源开关/默认关闭
@@ -68,11 +62,7 @@ spring:
# redis 配置
redis:
# 地址
<<<<<<< HEAD:openhis-server-new/openhis-application/src/main/resources/application-prd.yml
host: 192.168.110.252
=======
host: 172.16.101.2
>>>>>>> v1.3:openhis-server-new/openhis-application/src/main/resources/application-prod.yml
# 端口默认为6379
port: 6379
# 数据库索引

View File

@@ -49,11 +49,7 @@ spring:
# 国际化资源文件路径
basename: i18n/messages
profiles:
<<<<<<< HEAD
active: dev
=======
active: prod # (天翼云)cloud 本地测试test 本地local 生产prod (农大)
>>>>>>> v1.3
# 文件上传
servlet:
multipart:

View File

@@ -28,10 +28,7 @@
ii.min_unit_code,
ii.part_percent,
ii.approval_number,
<<<<<<< HEAD
=======
ii.item_id,
>>>>>>> v1.3
ii.dose_form_code,
ii.total_volume,
ii.sale_price,
@@ -40,292 +37,6 @@
ii.location_name,
ii.location_store_name,
ii.supplier_name
<<<<<<< HEAD
FROM (SELECT wii.id AS inventory_id,
wii.production_date,
wii.expiration_date,
(wii.expiration_date::date - CURRENT_DATE) AS remaining_days,
wii.inventory_status_enum,
wii.location_id,
wii.location_store_id,
wii.lot_number,
wii.quantity,
wii.supplier_id,
wii.tenant_id,
#{medMedicationDefinition} AS item_table,
mmd."name" AS item_name,
mmd.bus_no,
NULL AS dev_category_code,
mmd.category_code AS med_category_code,
mmd.chrgitm_lv,
mmd.manufacturer_text,
mmd.yb_no,
mmd.wb_str,
mmd.py_str,
mmd.unit_code,
mmd.min_unit_code,
mmd.part_percent,
mmd.approval_number,
mm.dose_form_code,
mm.total_volume,
acid.price AS sale_price,
acid.id AS charge_item_def_id,
acidd.amount AS purchase_price,
al."name" AS location_name,
al2."name" AS location_store_name,
as2."name" AS supplier_name
FROM wor_inventory_item wii
LEFT JOIN med_medication_definition mmd
ON wii.item_id = mmd.id
AND mmd.delete_flag = '0'
LEFT JOIN med_medication mm
ON mmd.id = mm.medication_def_id
AND mm.delete_flag = '0'
LEFT JOIN adm_charge_item_definition acid
ON wii.item_id = acid.instance_id
AND acid.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail acidd
ON acid.id = acidd.definition_id
AND acidd.condition_value = wii.lot_number
AND acidd.delete_flag = '0'
LEFT JOIN adm_location al
ON wii.location_id = al.id
AND al.delete_flag = '0'
LEFT JOIN adm_location al2
ON wii.location_store_id = al2.id
AND al2.delete_flag = '0'
LEFT JOIN adm_supplier as2
ON wii.supplier_id = as2.id
AND as2.delete_flag = '0'
WHERE wii.item_table = #{medMedicationDefinition}
AND acidd.condition_code = #{lotNumberCost}
AND wii.delete_flag = '0'
UNION
SELECT wii.id AS inventory_id,
wii.production_date,
wii.expiration_date,
(wii.expiration_date::date - CURRENT_DATE) AS remaining_days,
wii.inventory_status_enum,
wii.location_id,
wii.location_store_id,
wii.lot_number,
wii.quantity,
wii.supplier_id,
wii.tenant_id,
#{admDeviceDefinition} AS item_table,
add2."name" AS item_name,
add2.bus_no,
add2.category_code AS dev_category_code,
NULL AS med_category_code,
add2.chrgitm_lv,
add2.manufacturer_text,
add2.yb_no,
add2.wb_str,
add2.py_str,
add2.unit_code,
add2.min_unit_code,
add2.part_percent,
add2.approval_number,
NULL AS dose_form_code,
add2.size AS total_volume,
acid.price AS sale_price,
acid.id AS charge_item_def_id,
acidd.amount AS purchase_price,
al."name" AS location_name,
al2."name" AS location_store_name,
as2."name" AS supplier_name
FROM wor_inventory_item wii
LEFT JOIN adm_device_definition add2
ON wii.item_id = add2.id
AND add2.delete_flag = '0'
LEFT JOIN adm_charge_item_definition acid
ON wii.item_id = acid.instance_id
AND acid.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail acidd
ON acid.id = acidd.definition_id
AND acidd.condition_code = #{lotNumberCost}
AND acidd.condition_value = wii.lot_number
AND acidd.delete_flag = '0'
LEFT JOIN adm_location al
ON wii.location_id = al.id
AND al.delete_flag = '0'
LEFT JOIN adm_location al2
ON wii.location_store_id = al2.id
AND al2.delete_flag = '0'
LEFT JOIN adm_supplier as2
ON wii.supplier_id = as2.id
AND as2.delete_flag = '0'
WHERE wii.item_table = #{admDeviceDefinition}
AND acidd.condition_code = #{lotNumberCost}
AND wii.delete_flag = '0') AS ii
${ew.customSqlSegment}
ORDER BY ii.py_str
</select>
<select id="selectProductDetailsPageX"
resultType="com.openhis.web.inventorymanage.dto.ProductDetailPageDto">
SELECT DISTINCT ii.inventory_id,
ii.production_date,
ii.expiration_date,
ii.remaining_days,
ii.inventory_status_enum,
ii.location_id,
ii.location_store_id,
ii.lot_number,
ii.quantity,
ii.supplier_id,
ii.item_table,
ii.item_name,
ii.bus_no,
ii.dev_category_code,
ii.med_category_code,
ii.chrgitm_lv,
ii.manufacturer_text,
ii.yb_no,
ii.wb_str,
ii.py_str,
ii.unit_code,
ii.min_unit_code,
ii.part_percent,
ii.approval_number,
ii.dose_form_code,
ii.total_volume,
ii.sale_price,
ii.charge_item_def_id,
ii.purchase_price,
ii.location_name,
ii.location_store_name,
ii.supplier_name,
sdd.dict_label AS unitCode_dictText,
sdd2.dict_label AS minUnitCode_dictText,
sdd3.dict_label AS devCategoryCode_dictText,
sdd4.dict_label AS doseFormCode_dictText,
sdd5.dict_label AS medCategoryCode_dictText
FROM (SELECT wii.id AS inventory_id,
wii.production_date,
wii.expiration_date,
(wii.expiration_date::date - CURRENT_DATE) AS remaining_days,
wii.inventory_status_enum,
wii.location_id,
wii.location_store_id,
wii.lot_number,
wii.quantity,
wii.supplier_id,
wii.tenant_id,
#{medMedicationDefinition} AS item_table,
mmd."name" AS item_name,
mmd.bus_no,
NULL AS dev_category_code,
mmd.category_code AS med_category_code,
mmd.chrgitm_lv,
mmd.manufacturer_text,
mmd.yb_no,
mmd.wb_str,
mmd.py_str,
mmd.unit_code,
mmd.min_unit_code,
mmd.part_percent,
mmd.approval_number,
mm.dose_form_code,
mm.total_volume,
acid.price AS sale_price,
acid.id AS charge_item_def_id,
acidd.amount AS purchase_price,
al."name" AS location_name,
al2."name" AS location_store_name,
as2."name" AS supplier_name
FROM wor_inventory_item wii
LEFT JOIN med_medication_definition mmd
ON wii.item_id = mmd.id
AND mmd.delete_flag = '0'
LEFT JOIN med_medication mm
ON mmd.id = mm.medication_def_id
AND mm.delete_flag = '0'
LEFT JOIN adm_charge_item_definition acid
ON wii.item_id = acid.instance_id
AND acid.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail acidd
ON acid.id = acidd.definition_id
AND acidd.condition_value = wii.lot_number
AND acidd.delete_flag = '0'
LEFT JOIN adm_location al
ON wii.location_id = al.id
AND al.delete_flag = '0'
LEFT JOIN adm_location al2
ON wii.location_store_id = al2.id
AND al2.delete_flag = '0'
LEFT JOIN adm_supplier as2
ON wii.supplier_id = as2.id
AND as2.delete_flag = '0'
WHERE wii.item_table = #{medMedicationDefinition}
AND acidd.condition_code = #{lotNumberCost}
AND wii.delete_flag = '0'
UNION
SELECT wii.id AS inventory_id,
wii.production_date,
wii.expiration_date,
(wii.expiration_date::date - CURRENT_DATE) AS remaining_days,
wii.inventory_status_enum,
wii.location_id,
wii.location_store_id,
wii.lot_number,
wii.quantity,
wii.supplier_id,
wii.tenant_id,
#{admDeviceDefinition} AS item_table,
add2."name" AS item_name,
add2.bus_no,
add2.category_code AS dev_category_code,
NULL AS med_category_code,
add2.chrgitm_lv,
add2.manufacturer_text,
add2.yb_no,
add2.wb_str,
add2.py_str,
add2.unit_code,
add2.min_unit_code,
add2.part_percent,
add2.approval_number,
NULL AS dose_form_code,
add2.size AS total_volume,
acid.price AS sale_price,
acid.id AS charge_item_def_id,
acidd.amount AS purchase_price,
al."name" AS location_name,
al2."name" AS location_store_name,
as2."name" AS supplier_name
FROM wor_inventory_item wii
LEFT JOIN adm_device_definition add2
ON wii.item_id = add2.id
AND add2.delete_flag = '0'
LEFT JOIN adm_charge_item_definition acid
ON wii.item_id = acid.instance_id
AND acid.delete_flag = '0'
LEFT JOIN adm_charge_item_def_detail acidd
ON acid.id = acidd.definition_id
AND acidd.condition_code = #{lotNumberCost}
AND acidd.condition_value = wii.lot_number
AND acidd.delete_flag = '0'
LEFT JOIN adm_location al
ON wii.location_id = al.id
AND al.delete_flag = '0'
LEFT JOIN adm_location al2
ON wii.location_store_id = al2.id
AND al2.delete_flag = '0'
LEFT JOIN adm_supplier as2
ON wii.supplier_id = as2.id
AND as2.delete_flag = '0'
WHERE wii.item_table = #{admDeviceDefinition}
AND acidd.condition_code = #{lotNumberCost}
AND wii.delete_flag = '0') AS ii
LEFT JOIN sys_dict_data sdd ON ii.unit_code = sdd.dict_value AND sdd.dict_type = 'unit_code'
LEFT JOIN sys_dict_data sdd2 ON ii.min_unit_code = sdd2.dict_value AND sdd2.dict_type = 'unit_code'
LEFT JOIN sys_dict_data sdd3 ON ii.dev_category_code = sdd3.dict_value AND sdd3.dict_type = 'device_category_code'
LEFT JOIN sys_dict_data sdd4 ON ii.dose_form_code = sdd4.dict_value AND sdd4.dict_type = 'dose_form_code'
LEFT JOIN sys_dict_data sdd5 ON ii.med_category_code = sdd5.dict_value AND sdd5.dict_type = 'med_category_code'
${ew.customSqlSegment}
ORDER BY ii.py_str
=======
FROM (
(SELECT wii.id AS inventory_id,
wii.production_date,
@@ -708,6 +419,5 @@
WHERE delete_flag = '0'
) AS ii
${ew.customSqlSegment}
>>>>>>> v1.3
</select>
</mapper>

View File

@@ -40,13 +40,9 @@
T1.item_table,
T1.purpose_type_enum,
T1.tenant_id,
<<<<<<< HEAD
T1.category_enum
=======
T1.category_enum,
T1.purpose_location_id,
sum(T1.total_price) AS total_amount
>>>>>>> v1.3
FROM wor_supply_request AS T1
WHERE type_enum = #{purchaseInventory}
AND T1.delete_flag = '0'
@@ -61,12 +57,8 @@
T1.item_table,
T1.purpose_type_enum,
T1.tenant_id,
<<<<<<< HEAD
T1.category_enum
=======
T1.category_enum,
T1.purpose_location_id
>>>>>>> v1.3
ORDER BY T1.bus_no desc
) AS T2
${ew.customSqlSegment}
@@ -92,32 +84,17 @@
T2.part_percent,
T2.manufacturer_text,
T3.total_volume,
<<<<<<< HEAD
T5."name" AS practitioner_name,
T6."name" AS purpose_location_name,
T6."id" AS purpose_location_id,
T7."name" AS purpose_location_store_name,
T1.supplier_id AS supplierId,
T10."name" AS supplier_name,
=======
T5."name" AS practitioner_name,
T6."name" AS purpose_location_name,
T6."id" AS purpose_location_id,
T7."name" AS purpose_location_store_name,
>>>>>>> v1.3
T1.occurrence_time,
(SELECT SUM(T9.quantity)
FROM wor_inventory_item T9
WHERE T9.item_id = T1.item_id
<<<<<<< HEAD
AND T9.location_id = T1.purpose_location_id
) AS total_quantity,
T10."name" AS supplier_name
=======
AND T9.location_id = T1.purpose_location_id) AS total_quantity,
T10."name" AS supplier_name,
sdt.dict_label AS measurementUnitCode_dictText
>>>>>>> v1.3
FROM wor_supply_request T1
INNER JOIN med_medication_definition T2
ON T1.item_id = T2.id
@@ -132,11 +109,7 @@
ON T1.purpose_location_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_location T7
<<<<<<< HEAD
ON T1.purpose_location_store_id = T7.id
=======
ON T1.purpose_location_store_id = T7.id
>>>>>>> v1.3
AND T7.delete_flag = '0'
LEFT JOIN wor_inventory_item T9
ON T1.item_id = T9.item_id
@@ -145,11 +118,8 @@
LEFT JOIN adm_supplier T10
ON T1.supplier_id = T10.id
AND T10.delete_flag = '0'
<<<<<<< HEAD
=======
LEFT JOIN sys_dict_data sdt
ON sdt.dict_value = T1.unit_code AND dict_type = 'unit_code'
>>>>>>> v1.3
WHERE T1.bus_no = #{busNo}
AND T1.delete_flag = '0'
UNION
@@ -172,42 +142,15 @@
T8.id AS item_id,
T8.part_percent,
T8.manufacturer_text,
<<<<<<< HEAD
T8."size" AS total_volume,
T5."name" AS practitioner_name,
T6."name" AS purpose_location_name,
T6."id" AS purpose_location_id,
T7."name" AS purpose_location_store_name,
T1.supplier_id AS supplierId,
T10."name" AS supplier_name,
=======
T8."size" AS total_volume,
T5."name" AS practitioner_name,
T6."name" AS purpose_location_name,
T6."id" AS purpose_location_id,
T7."name" AS purpose_location_store_name,
>>>>>>> v1.3
T1.occurrence_time,
(SELECT SUM(T9.quantity)
FROM wor_inventory_item T9
WHERE T9.item_id = T1.item_id
<<<<<<< HEAD
AND T9.location_id = T1.purpose_location_id
) AS total_quantity,
T10."name" AS supplier_name
FROM wor_supply_request T1
INNER JOIN adm_device_definition T8
ON T1.item_id = T8.id
AND T8.delete_flag = '0'
LEFT JOIN adm_practitioner T5
ON T1.practitioner_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_location T6
ON T1.purpose_location_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_location T7
ON T1.purpose_location_store_id = T7.id
=======
AND T9.location_id = T1.purpose_location_id) AS total_quantity,
T10."name" AS supplier_name,
sdt.dict_label AS measurementUnitCode_dictText
@@ -223,24 +166,16 @@
AND T6.delete_flag = '0'
LEFT JOIN adm_location T7
ON T1.purpose_location_store_id = T7.id
>>>>>>> v1.3
AND T7.delete_flag = '0'
LEFT JOIN wor_inventory_item T9
ON T1.item_id = T9.item_id
AND T1.purpose_location_id = T9.location_id
<<<<<<< HEAD
AND T9.delete_flag = '0'
LEFT JOIN adm_supplier T10
ON T1.supplier_id = T10.id
AND T10.delete_flag = '0'
=======
AND T9.delete_flag = '0'
LEFT JOIN adm_supplier T10
ON T1.supplier_id = T10.id
AND T10.delete_flag = '0'
LEFT JOIN sys_dict_data sdt
ON sdt.dict_value = T1.unit_code AND dict_type = 'unit_code'
>>>>>>> v1.3
WHERE T1.bus_no = #{busNo}
AND T1.delete_flag = '0'
</select>
@@ -284,19 +219,11 @@
LEFT JOIN adm_location T6
ON T1.purpose_location_id = T6.id
LEFT JOIN adm_location T7
<<<<<<< HEAD
ON T1.purpose_location_store_id = T7.id
LEFT JOIN wor_inventory_item T9
ON T1.item_id = T9.item_id
AND T1.purpose_location_id = T9.location_id
WHERE T1.purpose_location_id = #{locationId}
=======
ON T1.purpose_location_store_id = T7.id
LEFT JOIN wor_inventory_item T9
ON T1.item_id = T9.item_id
AND T1.purpose_location_id = T9.location_id
WHERE T1.purpose_location_id = #{locationId}
>>>>>>> v1.3
AND T1.status_enum = #{statusEnum}
AND T1.type_enum IN
<foreach collection="typeEnum" item="item" separator="," open="(" close=")">
@@ -343,19 +270,11 @@
LEFT JOIN adm_location T6
ON T1.purpose_location_id = T6.id
LEFT JOIN adm_location T7
<<<<<<< HEAD
ON T1.purpose_location_store_id = T7.id
LEFT JOIN wor_inventory_item T9
ON T1.item_id = T9.item_id
AND T1.purpose_location_id = T9.location_id
WHERE T1.purpose_location_id = #{locationId}
=======
ON T1.purpose_location_store_id = T7.id
LEFT JOIN wor_inventory_item T9
ON T1.item_id = T9.item_id
AND T1.purpose_location_id = T9.location_id
WHERE T1.purpose_location_id = #{locationId}
>>>>>>> v1.3
AND T1.status_enum = #{statusEnum}
AND T1.type_enum IN
<foreach collection="typeEnum" item="item" separator="," open="(" close=")">

View File

@@ -147,48 +147,6 @@
T2.apply_time,
T2.practitioner_id,
T2.tenant_id,
<<<<<<< HEAD
T2.supplier_id,
T2.purpose_location_id,
T2.total_amount
FROM (SELECT T1.bus_no AS supply_bus_no,
T1.status_enum,
T1.type_enum,
T1.approver_id,
T1.approval_time,
T1.applicant_id,
T1.apply_time,
T1.practitioner_id,
T1.tenant_id,
T1.supplier_id,
T1.purpose_location_id,
SUM ( T1.total_price ) as total_amount
FROM wor_supply_request AS T1
LEFT JOIN adm_supplier T3
ON T3.id = T1.supplier_id
AND T3.delete_flag = '0'
LEFT JOIN adm_location T4
ON T4.id = T1.purpose_location_id
AND T4.delete_flag = '0'
WHERE T1.status_enum IN (#{approval},#{agree},#{reject})
AND T1.type_enum IN (#{productBatchTransfer},#{productTransfer},#{productReturn},#{productStocktaking},
#{productBatchStocktaking},#{purchaseInventory},#{lossReportForm},#{issueInventory},#{returnIssue})
AND T1.delete_flag = '0'
GROUP BY
T1.bus_no,
T1.status_enum,
T1.type_enum,
T1.approver_id,
T1.approval_time,
T1.applicant_id,
T1.apply_time,
T1.practitioner_id,
T1.tenant_id,
T1.summary_id,
T1.supplier_id,
T1.purpose_location_id
ORDER BY T1.apply_time desc
=======
T2.purpose_location_id,
CASE
WHEN T2.type_enum IN (#{purchaseInventory}, #{productReturn}) THEN T2.supplier_id
@@ -231,7 +189,6 @@
T1.tenant_id,
T1.purpose_location_id
ORDER BY T1.apply_time desc
>>>>>>> v1.3
) AS T2
${ew.customSqlSegment}
</select>

View File

@@ -77,10 +77,6 @@
T1.unit_price,
T1.total_price,
mmr.prescription_no,
<<<<<<< HEAD
mmr.prescription_no,
=======
>>>>>>> v1.3
mmr.method_code,
mmr.rate_code,
mmr.dose,

View File

@@ -95,18 +95,7 @@
T13.charge_item_ids,
T13.id AS payment_id,
ai.picture_url AS picture_url,
<<<<<<< HEAD
T8.birth_date AS birth_date,
T14.create_time AS return_date,
T14.return_reason AS return_reason,
T15.name AS operator_name,
T15.id AS operator_id,
T14.display_amount AS refund_amount,
T6.contract_no AS contract_no,
T16.refund_method AS refund_method
=======
T8.birth_date AS birth_date
>>>>>>> v1.3
FROM adm_encounter AS T1
LEFT JOIN adm_organization AS T2 ON T1.organization_id = T2.ID AND T2.delete_flag = '0'
LEFT JOIN adm_healthcare_service AS T3 ON T1.service_type_id = T3.ID AND T3.delete_flag = '0'

View File

@@ -335,34 +335,6 @@
<select id="selectPrescriptionPrintInfo" resultMap="PrescriptionPrintInfoMap">
SELECT ae.yb_class_enum AS encounter_yb_class,
<<<<<<< HEAD
mmr.prescription_no ,
fc.contract_name ,
ap."name" AS patient_name,
ap.gender_enum ,
ap.birth_date ,
ae.bus_no AS encounter_no,
ao."name" AS department_name,
ccd."name" AS condition_name,
ap.phone ,
mmr.req_authored_time AS req_time,
ap2."name" AS doctor_name,
ap3."name" AS dispense_doctor_name,
ap4."name" AS charge_doctor_name,
ap5."name" AS preparer_doctor_name,
mmd2."name" AS item_name,
mm.total_volume ,
mmr.dose ,
mmr.method_code ,
aci.unit_price ,
aci.total_price ,
mmr.quantity,
mmr.rate_code ,
mmr.unit_code ,
mmr.dose_unit_code,
mmr.sort_number,
mmr.group_id
=======
mmr.prescription_no ,
fc.contract_name ,
ap."name" AS patient_name,
@@ -394,7 +366,6 @@
ap.address,
ae.patient_id,
mmd2.basic_flag
>>>>>>> v1.3
FROM med_medication_request mmr
LEFT JOIN med_medication_dispense mmd
ON mmd.med_req_id = mmr.id
@@ -450,48 +421,6 @@
</select>
<select id="selectTreatmentPrintInfo" resultMap="TreatmentPrintInfoMap">
SELECT ae.yb_class_enum AS encounter_yb_class,
<<<<<<< HEAD
fc.contract_name ,
ap."name" AS patient_name,
ap.gender_enum ,
ap.birth_date ,
ae.bus_no AS encounter_no,
ao."name" AS department_name,
ap.phone ,
ae.reception_time AS req_time,
ap2."name" AS doctor_name,
aci.unit_price ,
aci.total_price,
wdr.quantity ,
wdr.unit_code ,
add2."name" AS item_name
FROM wor_device_request wdr
LEFT JOIN adm_device_definition add2
ON wdr.device_def_id = add2.id
AND add2.delete_flag = '0'
LEFT JOIN adm_charge_item aci
ON aci.service_id = wdr.id
AND aci.delete_flag = '0'
LEFT JOIN adm_encounter ae
ON wdr.encounter_id = ae.id
AND ae.delete_flag = '0'
LEFT JOIN adm_patient ap
ON ae.patient_id = ap.id
AND ap.delete_flag = '0'
LEFT JOIN adm_organization ao
ON ao.id = ae.organization_id
AND ao.delete_flag = '0'
LEFT JOIN adm_account aa
ON ae.id = aa.encounter_id
AND aa.encounter_flag = 1
AND aa.delete_flag = '0'
LEFT JOIN fin_contract fc
ON aa.contract_no = fc.bus_no
AND fc.delete_flag = '0'
LEFT JOIN adm_practitioner ap2
ON ap2.id = wdr.requester_id
AND ap2.delete_flag = '0'
=======
fc.contract_name ,
ap."name" AS patient_name,
ap.gender_enum ,
@@ -535,7 +464,6 @@
LEFT JOIN adm_practitioner ap2
ON ap2.id = wdr.requester_id
AND ap2.delete_flag = '0'
>>>>>>> v1.3
WHERE wdr.delete_flag = '0'
AND wdr.id IN
<foreach collection="requestIds" item="requestId" separator="," open="(" close=")">
@@ -543,48 +471,6 @@
</foreach>
UNION
SELECT ae.yb_class_enum AS encounter_yb_class,
<<<<<<< HEAD
fc.contract_name ,
ap."name" AS patient_name,
ap.gender_enum ,
ap.birth_date ,
ae.bus_no AS encounter_no,
ao."name" AS department_name,
ap.phone ,
ae.reception_time AS req_time,
ap2."name" AS doctor_name,
aci.unit_price ,
aci.total_price,
wsr.quantity ,
wsr.unit_code ,
wad."name" AS item_name
FROM wor_service_request wsr
LEFT JOIN wor_activity_definition wad
ON wsr.activity_id = wad.id
AND wad.delete_flag = '0'
LEFT JOIN adm_charge_item aci
ON aci.service_id = wsr.id
AND aci.delete_flag = '0'
LEFT JOIN adm_encounter ae
ON wsr.encounter_id = ae.id
AND ae.delete_flag = '0'
LEFT JOIN adm_patient ap
ON ae.patient_id = ap.id
AND ap.delete_flag = '0'
LEFT JOIN adm_organization ao
ON ao.id = ae.organization_id
AND ao.delete_flag = '0'
LEFT JOIN adm_account aa
ON ae.id = aa.encounter_id
AND aa.encounter_flag = 1
AND aa.delete_flag = '0'
LEFT JOIN fin_contract fc
ON aa.contract_no = fc.bus_no
AND fc.delete_flag = '0'
LEFT JOIN adm_practitioner ap2
ON ap2.id = wsr.requester_id
AND ap2.delete_flag = '0'
=======
fc.contract_name ,
ap."name" AS patient_name,
ap.gender_enum ,
@@ -628,7 +514,6 @@
LEFT JOIN adm_practitioner ap2
ON ap2.id = wsr.requester_id
AND ap2.delete_flag = '0'
>>>>>>> v1.3
WHERE wsr.delete_flag = '0'
AND wsr.id IN
<foreach collection="requestIds" item="requestId" separator="," open="(" close=")">

View File

@@ -5,8 +5,6 @@
resultType="com.openhis.web.datadictionary.dto.DiagnosisTreatmentDto">
SELECT
<<<<<<< HEAD
=======
T3.id,
T3.category_code,
T3.bus_no,
@@ -37,7 +35,6 @@
FROM
(
SELECT
>>>>>>> v1.3
T1.id,
T1.category_code,
T1.bus_no,

View File

@@ -41,12 +41,8 @@
abi.position_id,
abi.restricted_flag,
abi.restricted_scope,
<<<<<<< HEAD
abi.dosage_instruction
=======
abi.dosage_instruction,
abi.chrgitm_lv
>>>>>>> v1.3
from (
<if test="adviceTypes == null or adviceTypes.contains(1)">
(SELECT
@@ -87,12 +83,8 @@
T6.def_location_id AS position_id,
t1.restricted_flag AS restricted_flag,
t1.restricted_scope AS restricted_scope,
<<<<<<< HEAD
T1.dosage_instruction AS dosage_instruction
=======
T1.dosage_instruction AS dosage_instruction,
T1.chrgitm_lv as chrgitm_lv
>>>>>>> v1.3
FROM med_medication_definition AS t1
INNER JOIN med_medication AS T2 ON T2.medication_def_id = T1.ID
AND T2.delete_flag = '0' AND T2.status_enum = #{statusEnum}
@@ -164,12 +156,8 @@
T5.def_location_id AS position_id,
0 AS restricted_flag,
'' AS restricted_scope,
<<<<<<< HEAD
'' AS dosage_instruction
=======
'' AS dosage_instruction,
T1.chrgitm_lv as chrgitm_lv
>>>>>>> v1.3
FROM adm_device_definition AS T1
LEFT JOIN adm_supplier AS T2
ON T2.ID = T1.supply_id
@@ -235,12 +223,8 @@
T3.organization_id AS position_id,
0 AS restricted_flag,
'' AS restricted_scope,
<<<<<<< HEAD
'' AS dosage_instruction
=======
'' AS dosage_instruction,
T1.chrgitm_lv as chrgitm_lv
>>>>>>> v1.3
FROM wor_activity_definition AS T1
LEFT JOIN adm_charge_item_definition AS T2
ON T2.instance_id = T1.ID
@@ -543,10 +527,6 @@
T3.service_table = #{WOR_SERVICE_REQUEST}
LEFT JOIN adm_organization AS ao ON ao.ID = T1.org_id AND ao.delete_flag = '0'
WHERE T1.delete_flag = '0' AND T1.generate_source_enum = #{generateSourceEnum}
<<<<<<< HEAD
AND T1.based_on_table is null
=======
>>>>>>> v1.3
AND T1.parent_id IS NULL
AND T1.refund_service_id IS NULL
<if test="historyFlag == '0'.toString()">
@@ -620,8 +600,6 @@
AND tad.status_enum = #{status}
AND tad.type_code = #{typeCode}
AND tad.item_no = #{itemNo}
<<<<<<< HEAD
=======
</select>
<select id="getProofAndTestHistory" resultType="com.openhis.web.doctorstation.dto.ProofAndTestHistoryDto">
@@ -646,7 +624,6 @@
AND wsr.encounter_id = #{encounterId}
AND EXISTS ( SELECT 1 FROM wor_activity_definition AS wad WHERE wad.type_enum = #{typeEnum}
AND wad.ID = wsr.activity_id )
>>>>>>> v1.3
</select>
</mapper>

View File

@@ -48,15 +48,7 @@
T1.create_time AS register_time,
T1.reception_time AS reception_time,
T1.organization_id AS org_id,
<<<<<<< HEAD
T8.bus_no AS bus_no,
CASE
WHEN T9.patient_id IS NOT NULL THEN 1
ELSE 0
END AS allergy_history_flag
=======
T8.bus_no AS bus_no
>>>>>>> v1.3
FROM adm_encounter AS T1
LEFT JOIN adm_organization AS T2 ON T1.organization_id = T2.ID AND T2.delete_flag = '0'
LEFT JOIN adm_healthcare_service AS T3 ON T1.service_type_id = T3.ID AND T3.delete_flag = '0'

View File

@@ -239,11 +239,7 @@
ON wsr.source_location_id = al.id
AND al.delete_flag = '0'
WHERE wsr.delete_flag = '0'
<<<<<<< HEAD
AND wsd.status_enum IN (#{inProgress}, #{completed})
=======
AND wsd.status_enum IN (#{preparation}, #{completed})
>>>>>>> v1.3
AND wsr.type_enum = #{summaryDispense}
GROUP BY wsr.tenant_id,
wsr.bus_no ,
@@ -264,11 +260,8 @@
mmd.unit_code ,
mmd.min_unit_code ,
mmd.part_percent ,
<<<<<<< HEAD
=======
mmd.manufacturer_text,
mmd.category_code,
>>>>>>> v1.3
mm.total_volume ,
wsr.lot_number,
wsr.item_quantity

View File

@@ -2,9 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.inhospitalnursestation.mapper.NurseBillingAppMapper">
<<<<<<< HEAD
=======
<select id="getInNurseBillingPage"
resultType="com.openhis.web.inhospitalnursestation.dto.InpatientAdviceDto">
SELECT ii.encounter_id,
@@ -303,5 +300,4 @@
) AS ii
${ew.customSqlSegment}
</select>
>>>>>>> v1.3
</mapper>

View File

@@ -62,9 +62,6 @@
AND T7.delete_flag = '0'
LEFT JOIN adm_charge_item AS T8 ON T1.id = T8.service_id
AND T8.delete_flag = '0'
<<<<<<< HEAD
WHERE T1.delete_flag = '0') AS ii
=======
LEFT JOIN adm_encounter AS T9 ON T1.encounter_id = T9.id
AND T9.delete_flag = '0'
WHERE T1.delete_flag = '0'
@@ -72,7 +69,6 @@
AND T1.status_enum = #{requestStatus}
AND T2.status_enum = #{dispenseStatus}
AND T8.status_enum = #{chargeItemStatus}) AS ii
>>>>>>> v1.3
${ew.customSqlSegment}
</select>

View File

@@ -64,8 +64,6 @@
ORDER BY T1.id DESC) AS T
${ew.customSqlSegment}
</select>
<<<<<<< HEAD
=======
<select id="getPatientBusNoList" resultType="com.openhis.web.nenu.dto.GfStudentPeisDto">
SELECT T1.bus_no as bus_no
, T.id_number as id_number
@@ -101,6 +99,5 @@
ORDER BY T.id DESC
LIMIT 1 OFFSET 0
</select>
>>>>>>> v1.3
</mapper>

View File

@@ -34,12 +34,8 @@
AND T4.refund_device_id IS NULL
AND T4.delete_flag = '0'
WHERE T1.class_enum = #{amb}
<<<<<<< HEAD
AND T3.status_enum IN (#{completed},#{cancelled})
=======
AND (T3.status_enum IN (#{completed},#{cancelled})
OR T4.status_enum IN (#{completed},#{cancelled}))
>>>>>>> v1.3
AND T1.delete_flag = '0'
GROUP BY T1.tenant_id,
T1.id,

View File

@@ -53,11 +53,7 @@
FROM fin_payment_reconciliation t
LEFT JOIN adm_patient patient ON patient.id = t.patient_id
LEFT JOIN adm_practitioner pra ON pra.id = t.enterer_id
<<<<<<< HEAD
LEFT JOIN adm_invoice invoice ON invoice.reconciliation_id = t.id
=======
LEFT JOIN adm_invoice invoice ON invoice.reconciliation_id = t.id AND invoice.delete_flag = '0'
>>>>>>> v1.3
LEFT JOIN adm_encounter enc ON enc.id = t.enterer_id
WHERE 1 = 1
AND t.delete_flag = '0'

View File

@@ -4,195 +4,6 @@
<select id="selectAmbPractitionerDetailPage"
resultType="com.openhis.web.pharmacymanage.dto.MedDetailedAccountPageDto">
select A.outpatient_no,
<<<<<<< HEAD
A.prescription_no,
A.patient_name,
A.practitioner_id,
A.practitioner_name,
A.medication_name,
A.py_str,
A.bus_no,
A.dispense_no,
A.yb_no,
A.total_volume,
A.dispense_quantity,
A.dispense_price,
A.refund_quantity,
A.refund_price,
A.lot_number,
A.manufacturer_text,
A.supplier_name,
A.unit_code,
A.refund_unit_code,
A.dispense_time,
A.location_id,
A.item_table
from (
WITH refund_info AS (
SELECT mmr.refund_medicine_id,
mmd.dispense_quantity,
mmd.unit_code,
aci.total_price
FROM med_medication_dispense mmd
LEFT JOIN med_medication_request mmr
ON mmd.med_req_id = mmr.id
AND mmr.delete_flag = '0'
INNER JOIN adm_charge_item aci
ON aci.service_id = mmr.refund_medicine_id
AND aci.delete_flag = '0'
WHERE mmd.status_enum = #{refunded}
AND mmd.delete_flag = '0'
AND mmr.refund_medicine_id IS not null
),
refund_device_info AS (
SELECT wdr.refund_device_id,
wdd.dispense_quantity,
wdd.unit_code,
aci.total_price
FROM wor_device_dispense wdd
LEFT JOIN wor_device_request wdr
ON wdd.device_req_id = wdr.id
AND wdr.delete_flag = '0'
INNER JOIN adm_charge_item aci
ON aci.service_id = wdd.device_req_id
AND aci.delete_flag = '0'
WHERE wdd.status_enum = #{refunded}
AND wdd.delete_flag = '0'
AND wdr.refund_device_id IS not null
)
SELECT def."name" AS medication_name,
def.py_str,
def.bus_no,
def.yb_no,
def.manufacturer_text,
mmr.prescription_no,
ae.bus_no AS outpatient_no,
pat.name AS patient_name,
mm.total_volume,
mmd.unit_code,
mmd.bus_no AS dispense_no,
mmd.lot_number,
mmd.dispense_quantity,
mmd.encounter_id,
mmd.practitioner_id,
mmd.dispense_time,
ap.name AS practitioner_name,
mmd.location_id,
aci.total_price AS dispense_price,
ri.dispense_quantity AS refund_quantity,
ri.unit_code AS refund_unit_code,
ri.total_price AS refund_price,
wii.supplier_id,
sup.name AS supplier_name,
mmd.tenant_id,
#{medMedicationDefinition} AS item_table
FROM med_medication_dispense mmd
LEFT JOIN med_medication_request mmr
ON mmd.med_req_id = mmr.id
AND mmr.delete_flag = '0'
INNER JOIN adm_charge_item aci
ON aci.service_id = mmr.id
AND aci.delete_flag = '0'
LEFT JOIN med_medication_definition def
ON mmd.medication_id = def.id
AND def.delete_flag = '0'
LEFT JOIN med_medication mm
ON mm.medication_def_id = def.id
AND mm.delete_flag = '0'
LEFT JOIN wor_inventory_item wii
ON wii.item_id = mmd.medication_id
AND wii.lot_number = mmd.lot_number
AND wii.location_id = mmd.location_id
AND wii.delete_flag = '0'
LEFT JOIN refund_info AS ri
ON ri.refund_medicine_id = mmr.id
LEFT JOIN adm_location al
ON al.id = mmd.location_id
LEFT JOIN adm_practitioner ap
ON ap.id = mmd.practitioner_id
LEFT JOIN adm_patient pat
ON pat.id = mmd.patient_id
LEFT JOIN adm_encounter ae
ON ae.id = mmd.encounter_id
LEFT JOIN adm_supplier sup
ON sup.id = wii.supplier_id
WHERE mmd.status_enum = #{completed}
AND mmr.status_enum = #{agree}
<if test="flg != 1">
AND ae.class_enum = #{amb}
</if>
AND mmd.delete_flag = '0'
UNION
SELECT def."name" AS medication_name,
def.py_str,
def.bus_no,
def.yb_no,
def.manufacturer_text,
mmr.prescription_no,
ae.bus_no AS outpatient_no,
pat.name AS patient_name,
def.size AS total_volume,
mmd.unit_code,
mmd.bus_no AS dispense_no,
mmd.lot_number,
mmd.dispense_quantity,
mmd.encounter_id,
mmd.performer_id AS practitioner_id,
mmd.dispense_time,
ap.name AS practitioner_name,
mmd.location_id,
aci.total_price AS dispense_price,
ri.dispense_quantity AS refund_quantity,
ri.unit_code AS refund_unit_code,
ri.total_price AS refund_price,
wii.supplier_id,
sup.name AS supplier_name,
mmd.tenant_id,
#{admDeviceDefinition} AS item_table
FROM wor_device_dispense mmd
LEFT JOIN wor_device_request mmr
ON mmd.device_req_id = mmr.id
AND mmr.delete_flag = '0'
INNER JOIN adm_charge_item aci
ON aci.service_id = mmr.id
AND aci.delete_flag = '0'
LEFT JOIN adm_device_definition def
ON mmd.device_def_id = def.id
AND def.delete_flag = '0'
LEFT JOIN adm_device mm
ON mm.device_def_id = def.id
AND mm.delete_flag = '0'
LEFT JOIN wor_inventory_item wii
ON wii.item_id = mmd.device_def_id
AND wii.lot_number = mmd.lot_number
AND wii.location_id = mmd.location_id
AND wii.delete_flag = '0'
LEFT JOIN refund_device_info AS ri
ON ri.refund_device_id = mmr.id
LEFT JOIN adm_location al
ON al.id = mmd.location_id
LEFT JOIN adm_practitioner ap
ON ap.id = mmd.performer_id
LEFT JOIN adm_patient pat
ON pat.id = mmd.patient_id
LEFT JOIN adm_encounter ae
ON ae.id = mmd.encounter_id
LEFT JOIN adm_supplier sup
ON sup.id = wii.supplier_id
WHERE mmd.status_enum = #{completed}
AND mmr.status_enum = #{agree}
<if test="flg != 1">
AND ae.class_enum = #{amb}
</if>
AND mmd.delete_flag = '0'
) AS A
${ew.customSqlSegment}
<choose>
<when test="dispenseEnum == 1">
ORDER BY A.dispense_time DESC
</when>
<when test="dispenseEnum == 2">
=======
A.prescription_no,
A.patient_name,
A.practitioner_id,
@@ -417,7 +228,6 @@
ORDER BY A.dispense_time DESC
</when>
<when test="statisticalType == 2 || statisticalType ==4 || statisticalType ==6">
>>>>>>> v1.3
ORDER BY A.outpatient_no DESC, A.prescription_no DESC
</when>
</choose>

View File

@@ -83,23 +83,6 @@
<when test="(medDispenseIdList != null and !medDispenseIdList.isEmpty())
or (devDispenseIdList != null and !devDispenseIdList.isEmpty())">
<if test="medDispenseIdList != null and !medDispenseIdList.isEmpty()">
<<<<<<< HEAD
SELECT
T1.id AS dispense_id,
T1.unit_code AS dispense_unit,
T1.quantity,
T1.location_id,
T1.lot_number,
T1.dispense_quantity,
T2.id AS inventory_id,
T2.unit_code AS inventory_unit_code,
T2.quantity AS inventory_quantity,
T2.inventory_status_enum,
T2.expiration_date,
T3.part_percent,
T3."name" AS item_name,
T3.id AS item_id
=======
SELECT T1.id AS dispense_id,
T1.unit_code AS dispense_unit,
T1.quantity,
@@ -117,7 +100,6 @@
T3.part_percent,
T3."name" AS item_name,
T1.medication_id AS item_id
>>>>>>> v1.3
FROM med_medication_dispense AS T1
INNER JOIN wor_inventory_item AS T2
ON T1.medication_id = T2.item_id
@@ -139,23 +121,6 @@
UNION
</if>
<if test="devDispenseIdList != null and !devDispenseIdList.isEmpty()">
<<<<<<< HEAD
SELECT
T4.id AS dispense_id,
T4.unit_code AS dispense_unit,
T4.quantity,
T4.location_id,
T4.lot_number,
T4.dispense_quantity,
T2.id AS inventory_id,
T2.unit_code AS inventory_unit_code,
T2.quantity AS inventory_quantity,
T2.inventory_status_enum,
T2.expiration_date,
T5.part_percent,
T5."name" AS item_name,
T5.id AS item_id
=======
SELECT T4.id AS dispense_id,
T4.unit_code AS dispense_unit,
T4.quantity,
@@ -173,7 +138,6 @@
T5.part_percent,
T5."name" AS item_name,
T4.device_def_id AS item_id
>>>>>>> v1.3
FROM wor_device_dispense AS T4
INNER JOIN wor_inventory_item AS T2
ON T4.device_def_id = T2.item_id

View File

@@ -1,187 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.pharmacymanage.mapper.SummaryDispenseMedicineMapper">
<<<<<<< HEAD
<select id="selectMedicationSummaryInfo" resultType="com.openhis.web.pharmacymanage.dto.MedicineSummaryDto">
SELECT ii.tenant_id,
ii.bus_no,--单据号
ii.request_id,--供应请求id
ii.delivery_id,--供应发放id
ii.item_table,--项目表
ii.item_name,--项目名
ii.item_id,--项目id
ii.total_volume,--规格
ii.lot_number,--批号
ii.quantity,--请求数
ii.unit_code,--单位
ii.max_unit_code,--常规单位
ii.min_unit_code,--最小单位
ii.source_location_id,--发放地点
ii.source_location_name,
ii.org_id,--申请科室
ii.org_name,
ii.applicant_id,--领药人
ii.applicant_name,
ii.apply_time,--申请时间
ii.status_enum,--状态
ii.patient_info --患者信息
FROM (SELECT T1.tenant_id,
T1.bus_no,--单据号
T1.id AS request_id,--供应请求id
T2.id AS delivery_id,--供应发放id
T1.item_table,--项目表
T3.name AS item_name,--项目名
T1.item_id,--项目id
T4.total_volume,--规格
T1.lot_number,--批号
T1.item_quantity AS quantity,--请求数
T1.unit_code,--单位
T3.unit_code AS max_unit_code,--常规单位
T3.min_unit_code,--最小单位
T1.source_location_id,--发放地点
T5.name AS source_location_name,
T1.purpose_location_id AS org_id,--申请科室
T6.name AS org_name,
T1.applicant_id,--领药人
T7.name AS applicant_name,
T1.apply_time,--申请时间
T1.status_enum,--状态
STRING_AGG(CONCAT(T11.name, ' : ', T12.inpatient_bed), ',' ORDER BY T11.name,
T12.inpatient_bed) AS patient_info -- 患者信息
FROM wor_supply_request T1
LEFT JOIN wor_supply_delivery AS T2
ON T2.request_id = T1.id
AND T2.delete_flag = '0'
LEFT JOIN med_medication_definition AS T3
ON T1.item_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN med_medication AS T4
ON T3.id = T4.medication_def_id
AND T4.delete_flag = '0'
LEFT JOIN adm_location AS T5
ON T1.source_location_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_organization AS T6
ON T1.purpose_location_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_practitioner AS T7
ON T1.applicant_id = T7.id
AND T7.delete_flag = '0'
LEFT JOIN (SELECT id,
encounter_id,
patient_id
FROM (SELECT id,
encounter_id,
patient_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY id) AS rn
FROM med_medication_dispense
WHERE delete_flag = '0') t
WHERE rn = 1) AS T8
ON CONCAT(',', T2.based_on_ids, ',') LIKE CONCAT('%,', T8.id, ',%')
LEFT JOIN (SELECT STRING_AGG(T10.NAME, '_' ORDER BY T10.bus_no) AS inpatient_bed, T9.encounter_id
FROM adm_encounter_location T9
LEFT JOIN adm_location AS T10
ON T10.id = T9.location_id
AND T10.delete_flag = '0'
WHERE T9.status_enum = '2'
AND T9.delete_flag = '0'
GROUP BY T9.encounter_id) AS T12 ON T8.encounter_id = T12.encounter_id
LEFT JOIN adm_patient AS T11
ON T11.id = T8.patient_id
AND T11.delete_flag = '0'
WHERE T1.item_table = 'med_medication_definition'
AND T1.type_enum = 23
AND T1.category_enum = 21
AND T1.delete_flag = '0'
GROUP BY T1.tenant_id,
T1.bus_no,
T1.id,
T2.id,
T1.item_table,
T3.name,
T1.item_id,
T4.total_volume,
T1.lot_number,
T1.item_quantity,
T1.unit_code,
T3.unit_code,
T3.min_unit_code,
T1.source_location_id,
T5.name,
T1.purpose_location_id,
T6.name,
T1.applicant_id,
T7.name,
T1.apply_time,
T1.status_enum
) AS ii
${ew.customSqlSegment}
</select>
<select id="selectOrderInfo" resultType="com.openhis.web.pharmacymanage.dto.MedicineSummaryDto">
SELECT
li.bus_no,--单据号
li.request_id,--供应请求id
li.delivery_id,--供应发放id
li.item_table,--项目表
li.item_name,--项目名
li.item_id,--项目id
li.total_volume,--规格
li.lot_number,--批号
li.quantity,--请求数
li.unit_code,--单位
li.max_unit_code,--常规单位
li.min_unit_code,--最小单位
li.source_location_id,--发放地点
li.source_location_name,
li.org_id,--申请科室
li.org_name,
li.applicant_id,--领药人
li.applicant_name,
li.apply_time,--申请时间
li.status_enum--状态
FROM
(
SELECT
wsr.tenant_id,
wsr.bus_no,--单据号
wsd.request_id,--供应请求id
wsd.id AS delivery_id,--供应发放id
wsr.item_table,--项目表
mmd.name AS item_name,--项目名
wsr.item_id,--项目id
mm.total_volume,--规格
wsr.lot_number,--批号
wsr.item_quantity AS quantity,--请求数
wsr.unit_code,--单位
mmd.unit_code AS max_unit_code,--常规单位
mmd.min_unit_code,--最小单位
wsr.source_location_id,--发放地点
al.name AS source_location_name,
ao.id AS org_id,--申请科室
ao.name AS org_name,
wsr.applicant_id,--领药人
ap.name AS applicant_name,
wsr.apply_time,--申请时间
wsr.status_enum --状态
FROM
wor_supply_request AS wsr
LEFT JOIN adm_practitioner AS ap ON wsr.applicant_id = ap.ID
AND ap.delete_flag = '0'
LEFT JOIN wor_supply_delivery AS wsd ON wsd.request_id = wsr.ID
AND wsd.delete_flag = '0'
LEFT JOIN med_medication_definition AS mmd ON wsd.item_id = mmd.ID
AND mmd.delete_flag = '0'
LEFT JOIN med_medication AS mm ON mmd.ID = mm.medication_def_id
AND mm.delete_flag = '0'
LEFT JOIN adm_location AS al ON wsr.source_location_id = al.ID
AND al.delete_flag = '0'
LEFT JOIN adm_organization AS ao ON wsr.purpose_location_id = ao.ID
AND ao.delete_flag = '0'
WHERE wsr.delete_flag = '0'
) AS li
${ew.customSqlSegment}
</select>
=======
>>>>>>> v1.3
</mapper>

View File

@@ -66,44 +66,6 @@
ii.reception_time,
ii.start_time,
ii.status_enum
<<<<<<< HEAD
FROM ( SELECT T1.tenant_id,
T1.id AS encounter_id,
T1.bus_no AS encounter_no,
T1.reception_time,
T1.organization_id AS department_id,
T1.class_enum,
T2.gender_enum,
T2.name AS patient_name,
T2.wb_str AS patient_wb_str,
T2.py_str AS patient_py_str,
T2.id_card,
T2.birth_date,
T3.name AS department_name,
T4.status_enum
FROM adm_encounter AS T1
INNER JOIN adm_patient AS T2
ON T1.patient_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN adm_organization AS T3
ON T1.organization_id = T3.id
AND T3.delete_flag = '0'
INNER JOIN med_medication_dispense AS T4
ON T4.encounter_id = T1.id
AND T4.delete_flag = '0'
INNER JOIN med_medication_request AS T5
ON T4.med_req_id = T5.id
AND T5.delete_flag = '0'
WHERE <if test="statusEnum == null">
T4.status_enum IN (#{inProgress},#{completed},#{preparation},#{prepared})
</if>
<if test="statusEnum == 3">
T4.status_enum IN (#{inProgress},#{preparation},#{prepared})
</if>
<if test="statusEnum == 4">
T4.status_enum = #{completed}
</if>
=======
FROM ( SELECT T1.tenant_id,
T1.id AS encounter_id,
T1.bus_no AS encounter_no,
@@ -142,7 +104,6 @@
<if test="statusEnum == 4">
T4.status_enum = #{completed}
</if>
>>>>>>> v1.3
) AS ii
${ew.customSqlSegment}
GROUP BY ii.encounter_id,
@@ -162,125 +123,6 @@
ORDER BY ii.reception_time,
ii.start_time DESC
</select>
<<<<<<< HEAD
<select id="selectMedicineDispenseOrderPage" resultType="com.openhis.web.pharmacymanage.dto.ItemDispenseOrderDto">
SELECT ii.department_name,
ii.doctor_id,
ii.doctor_name,
ii.item_type,
ii.condition_name,
ii.prescription_no,
ii.lot_number,
ii.request_id,
ii.tcm_flag,
ii.item_name,
ii.item_id,
ii.total_volume,
ii.unit_code,
ii.encounter_id,
ii.dose,
ii.status_enum,
ii.rate_code,
ii.location_id,
ii.method_code,
ii.dose_unit_code,
ii.dispense_per_quantity,
ii.dispense_per_duration,
ii.quantity,
ii.dispense_id,
ii.unit_price,
ii.total_price,
ii.dispense_doctor_name,
ii.location_name,
ii.encounter_bus_no,
ii.req_authored_time,
ii.skin_test_flag,
ii.group_id,
ii.manufacturer_text,
ii.trace_no
FROM ( SELECT T8."name" AS department_name,
T9.id AS doctor_id,
T9."name" AS doctor_name,
T3.category_code AS item_type,
T7."name" AS condition_name,
T2.prescription_no,
T2.lot_number,
T2.id AS request_id,
T2.tcm_flag,
T3."name" AS item_name,
T3.id AS item_id,
T4.total_volume,
T1.unit_code,
T1.encounter_id,
T1.dose,
T1.status_enum,
T2.rate_code,
T1.location_id,
T1.method_code,
T2.dose_unit_code,
T2.dispense_per_quantity,
T2.dispense_per_duration,
T1.quantity,
T1.id AS dispense_id,
T5.unit_price,
T5.total_price,
T10."name" AS dispense_doctor_name,
T13."name" AS location_name,
T6.bus_no AS encounter_bus_no,
T2.req_authored_time,
T3.skin_test_flag,
T2.group_id AS group_id,
T1.tenant_id,
T3.manufacturer_text,
T1.trace_no
FROM med_medication_dispense AS T1
LEFT JOIN med_medication_request AS T2
ON T1.med_req_id = T2.id
AND T2.delete_flag = '0'
LEFT JOIN med_medication_definition AS T3
ON T1.medication_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN med_medication AS T4
ON T3.id = T4.medication_def_id
AND T4.delete_flag = '0'
INNER JOIN adm_charge_item AS T5
ON T1.med_req_id = T5.service_id
AND T5.delete_flag = '0'
LEFT JOIN adm_encounter AS T6
ON T1.encounter_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN cli_condition AS T12
ON T2.condition_id = T12.id
AND T12.delete_flag = '0'
LEFT JOIN cli_condition_definition AS T7
ON T12.definition_id = T7.id
AND T7.delete_flag = '0'
LEFT JOIN adm_organization AS T8
ON T6.organization_id = T8.id
AND T8.delete_flag = '0'
LEFT JOIN adm_practitioner AS T9
ON T2.practitioner_id = T9.id
AND T9.delete_flag = '0'
LEFT JOIN adm_practitioner AS T10
ON T1.practitioner_id = T10.id
AND T10.delete_flag = '0'
LEFT JOIN adm_location AS T13
ON T1.location_id = T13.id
AND T13.delete_flag = '0'
WHERE T1.delete_flag = '0'
-- 因发药配药合并,前台只能看到待发药,已发药状态,但是后台配药发药状态都查
AND
<if test="dispenseStatus == null">
T1.status_enum IN (#{inProgress},#{completed},#{preparation},#{prepared})
</if>
<if test="dispenseStatus == 3">
T1.status_enum IN (#{inProgress},#{preparation},#{prepared})
</if>
<if test="dispenseStatus == 4">
T1.status_enum = #{completed}
</if>
ORDER BY prescription_no DESC
=======
<select id="selectMedicineDispenseOrderPage" resultMap="medicineDispenseOrderMap">
SELECT ii.department_name,
ii.doctor_id,
@@ -430,7 +272,6 @@
</if>
AND T14.inventory_status_enum = #{active}
ORDER BY prescription_no DESC
>>>>>>> v1.3
) AS ii
${ew.customSqlSegment}
</select>

View File

@@ -236,10 +236,6 @@
T3.service_table = #{WOR_SERVICE_REQUEST}
LEFT JOIN adm_organization AS ao ON ao.ID = T1.org_id AND ao.delete_flag = '0'
WHERE T1.delete_flag = '0' AND T1.generate_source_enum = #{generateSourceEnum}
<<<<<<< HEAD
AND T1.based_on_table is null
=======
>>>>>>> v1.3
AND T1.parent_id IS NULL
<if test="historyFlag == '0'.toString()">
AND T1.encounter_id = #{encounterId}

View File

@@ -210,168 +210,6 @@
<!--门诊收入明细 -->
<select id="selectRevenueReportPage"
resultType="com.openhis.web.reportmanage.dto.ChargeReportPageDto">
<<<<<<< HEAD
SELECT T8.tenant_id,
T8.payment_id,
T8.charge_id,
T8.name, --
T8.gender_enum, --
T8.birth_date, --
T8.id_card, --
T8.yb_code, --
T8.encounter_date, --
T8.bus_no,--/
T8.department_id,--
T8.department_name,--
T8.clinical_name,--
T8.clinical_no, --
T8.ybNo,--
T8.type, --
T8.issuer_id,--
T8.issuer_name,--
T8.payee_id,--
T8.payee_name,--
T8.number,--
T8.quantity_unit,--
T8.price,--
T8.total_price,--
T8.charge_time,--
T8.total_volume, --
T8.chrgitmLv,--
T8.clinical_type, --
T8.encounter_id
FROM (SELECT DISTINCT T1.tenant_id,
T1.id AS payment_id,
T4.id AS charge_id,
T15.name, --
T15.gender_enum, --
T15.birth_date, --
T15.id_card, --
T16.psn_no AS yb_code, --
TO_CHAR(T2.reception_time, 'YYYY-MM-DD') AS encounter_date, --
T2.bus_no, --/
T3.id AS department_id,--
T3.name AS department_name,--
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.name
WHEN T5.instance_table = 'adm_healthcare_service' THEN T12.name
WHEN T5.instance_table = 'med_medication_definition' THEN T13.name
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.name
ELSE NULL
END AS clinical_name, --
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.bus_no
WHEN T5.instance_table = 'med_medication_definition' THEN T13.bus_no
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.bus_no
ELSE NULL
END AS clinical_no, --
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.yb_no
WHEN T5.instance_table = 'adm_healthcare_service' THEN T12.yb_no
WHEN T5.instance_table = 'med_medication_definition' THEN T13.yb_no
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.yb_no
ELSE NULL
END AS ybNo, --
T5.yb_type AS type, --
T6.id AS issuer_id,--
T6.name AS issuer_name,--
T7.id AS payee_id,--
T7.name AS payee_name,--
T4.quantity_value AS number,--
T4.quantity_unit,--
T4.unit_price AS price,--
CASE
WHEN T1.status_enum = #{refundAll} THEN -T4.total_price
ELSE T4.total_price
END AS total_price,--
T1.bill_date AS charge_time,--
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T17.device_specifications
WHEN T5.instance_table = 'med_medication_definition' THEN T18.total_volume
ELSE NULL
END AS total_volume, --
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN T11.chrgitm_lv
WHEN T5.instance_table = 'med_medication_definition' THEN T13.chrgitm_lv
WHEN T5.instance_table = 'wor_activity_definition' THEN T14.chrgitm_lv
ELSE NULL
END AS chrgitmLv,--
CASE
WHEN T5.instance_table = 'adm_device_definition' THEN #{device}
WHEN T5.instance_table = 'adm_healthcare_service' THEN #{register}
WHEN T5.instance_table = 'med_medication_definition' THEN #{medication}
WHEN T5.instance_table = 'wor_activity_definition' THEN #{activity}
ELSE NULL
END AS clinical_type, --
T1.encounter_id
FROM fin_payment_reconciliation T1
LEFT JOIN adm_encounter T2
ON T2.id = T1.encounter_id
AND T2.delete_flag = '0'
AND T2.class_enum = 2
LEFT JOIN adm_patient AS T15
ON T1.patient_id = T15.id
AND T15.delete_flag = '0'
LEFT JOIN yb_clinc_reg AS T16
ON T2.bus_no = T16.ipt_otp_no
LEFT JOIN adm_organization AS T3
ON T2.organization_id = T3.id
AND T3.delete_flag = '0'
LEFT JOIN adm_charge_item T4
ON CONCAT(',', T1.charge_item_ids, ',') LIKE CONCAT('%,', T4.id, ',%')
AND T4.delete_flag = '0'
LEFT JOIN adm_charge_item_definition T5
ON T4.definition_id = T5.id
AND T5.delete_flag = '0'
LEFT JOIN adm_device_definition T11
ON T5.instance_id = T11.id
AND T5.instance_table = 'adm_device_definition'
AND T11.delete_flag = '0'
LEFT JOIN adm_device T17
ON T11.id = T17.device_def_id
AND T17.delete_flag = '0'
LEFT JOIN adm_healthcare_service T12
ON T5.instance_id = T12.id
AND T5.instance_table = 'adm_healthcare_service'
AND T12.delete_flag = '0'
LEFT JOIN med_medication_definition T13
ON T5.instance_id = T13.id
AND T5.instance_table = 'med_medication_definition'
AND T13.delete_flag = '0'
LEFT JOIN med_medication T18
ON T13.id = T18.medication_def_id
AND T18.delete_flag = '0'
LEFT JOIN wor_activity_definition T14
ON T5.instance_id = T14.id
AND T5.instance_table = 'wor_activity_definition'
AND T14.delete_flag = '0'
LEFT JOIN adm_practitioner T6
ON T4.enterer_id = T6.id
AND T6.delete_flag = '0'
LEFT JOIN adm_practitioner T7
ON T1.enterer_id = T7.id
AND T7.delete_flag = '0'
<if test="statisticsFlg == 0 or statisticsFlg == 1">
INNER JOIN adm_account T19
ON T4.account_id = T19.id
AND T19.delete_flag = '0'
INNER JOIN fin_contract T20
ON T19.contract_no = T20.bus_no
AND T20.yb_flag = #{statisticsFlg}
AND T20.delete_flag = '0'
</if>
<if test="statisticsFlg == 3">
WHERE T1.status_enum = #{refundAll}
</if>
<if test="statisticsFlg != 3">
WHERE T1.status_enum IN (#{success}, #{refundAll})
</if>
AND T1.delete_flag = '0'
ORDER BY T2.bus_no,
T4.ID,
T1.bill_date) AS T8
${ew.customSqlSegment}
=======
<include refid="selectRevenueReportPage"/>
</select>
<!--门诊收入明细,不分页 -->
@@ -875,6 +713,5 @@
T5.yb_type,
T5.type_code,
T8.trade_type;
>>>>>>> v1.3
</select>
</mapper>

View File

@@ -30,18 +30,12 @@
<dependency>
<groupId>com.core</groupId>
<artifactId>core-admin</artifactId>
<<<<<<< HEAD
</dependency>
<dependency>
<groupId>com.core</groupId>
<artifactId>core-common</artifactId>
<scope>compile</scope>
</dependency>
=======
<version>0.0.1-SNAPSHOT</version>
</dependency>
>>>>>>> v1.3
</dependencies>
</project>

View File

@@ -30,14 +30,6 @@
<dependencies>
<<<<<<< HEAD
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
=======
>>>>>>> v1.3
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
@@ -54,15 +46,6 @@
<artifactId>openhis-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<<<<<<< HEAD
<!-- -->
<dependency>
<groupId>com.core</groupId>
<artifactId>core-common</artifactId>
</dependency>
=======
>>>>>>> v1.3
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>

View File

@@ -21,16 +21,9 @@
"dependencies": {
"@element-plus/icons-vue": "^2.3.2",
"@vueup/vue-quill": "1.2.0",
<<<<<<< HEAD
"@vueuse/core": "^11.0.0",
"area-data": "^5.0.6",
"axios": "^1.7.0",
"chart.js": "^4.5.1",
=======
"@vueuse/core": "10.6.1",
"axios": "0.27.2",
"china-division": "^2.7.0",
>>>>>>> v1.3
"d3": "^7.9.0",
"dayjs": "^1.11.19",
"decimal.js": "^10.5.0",
@@ -61,17 +54,6 @@
"vue-router": "^4.3.0"
},
"devDependencies": {
<<<<<<< HEAD
"@vitejs/plugin-vue": "^5.0.0",
"@vue/compiler-sfc": "^3.5.25",
"sass": "^1.97.1",
"sass-loader": "^16.0.6",
"unplugin-auto-import": "^0.19.0",
"unplugin-vue-setup-extend-plus": "^1.0.0",
"vite": "^7.3.0",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-svg-icons": "^2.0.1"
=======
"@types/node": "^25.0.1",
"@vitejs/plugin-vue": "4.5.0",
"@vue/compiler-sfc": "3.3.9",
@@ -83,6 +65,5 @@
"vite-plugin-compression": "0.5.1",
"vite-plugin-svg-icons": "2.0.1",
"vue-tsc": "^3.1.8"
>>>>>>> v1.3
}
}

View File

@@ -99,17 +99,6 @@ import axios from 'axios';
const env = import.meta.env.MODE;
export function invokeYbPlugin5001(data) {
<<<<<<< HEAD
if(env == 'development'){
return axios.create(
{
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: '/ybplugin',//ybplugin
// 超时
timeout: 60000
}
).post('/api/data/', data);
=======
return axios
.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
@@ -120,7 +109,6 @@ if(env == 'development'){
.post('http://localhost:5001/api/data/', data);
}
// }
>>>>>>> v1.3
export function invokeYbPlugin5000(data) {
return axios
@@ -128,15 +116,7 @@ export function invokeYbPlugin5000(data) {
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: '',
// 超时
<<<<<<< HEAD
timeout: 60000
}
).post('http://localhost:5000/api/data/', data);
}
}
=======
timeout: 60000,
})
.post('http://localhost:5000/api/data/', data);
}
>>>>>>> v1.3

View File

@@ -1,34 +1,5 @@
<template>
<div
<<<<<<< HEAD
:class="{ 'has-logo': showLogo }"
:style="{
backgroundColor:
sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground,
}"
class="sidebar-layout"
>
<!-- <logo v-if="showLogo" :collapse="isCollapse" /> -->
<el-menu
:default-active="activeMenu"
:collapse="isCollapse"
:background-color="
sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground
"
:text-color="sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor"
:unique-opened="true"
:active-text-color="theme"
:collapse-transition="false"
mode="horizontal"
>
<sidebar-item
v-for="(route, index) in sidebarRouters"
:key="route.path + index"
:item="route"
:base-path="route.path"
/>
</el-menu>
=======
:class="{ 'has-logo': showLogo }"
class="sidebar-wrapper"
:style="{
@@ -60,7 +31,6 @@
</el-menu>
</div>
</div>
>>>>>>> v1.3
<navbar @setLayout="setLayout" class="navbar-container" />
<settings ref="settingRef" />
</div>
@@ -103,9 +73,6 @@ function setLayout() {
</script>
<style lang="scss" scoped>
<<<<<<< HEAD
/* 移除滚动条样式 */
=======
.sidebar-wrapper {
display: flex;
flex-direction: row;
@@ -152,7 +119,6 @@ function setLayout() {
background: transparent;
}
}
>>>>>>> v1.3
.el-menu--horizontal {
display: flex !important;
@@ -161,12 +127,7 @@ function setLayout() {
background-color: transparent !important;
min-width: auto;
flex-wrap: nowrap;
<<<<<<< HEAD
overflow: hidden !important;
white-space: nowrap;
=======
height: 50px;
>>>>>>> v1.3
& > .el-menu-item,
& > .el-sub-menu {
@@ -175,16 +136,11 @@ function setLayout() {
color: #fff;
padding: 0 15px !important;
font-size: 14px;
<<<<<<< HEAD
min-width: auto !important;
white-space: nowrap;
=======
min-width: 120px !important;
flex-shrink: 0;
white-space: nowrap;
display: flex;
align-items: center;
>>>>>>> v1.3
}
:deep(.svg-icon) {
@@ -194,13 +150,9 @@ function setLayout() {
:deep(.el-sub-menu__title) {
padding-right: 25px !important;
<<<<<<< HEAD
white-space: nowrap;
=======
display: flex;
align-items: center;
height: 50px;
>>>>>>> v1.3
}
:deep(.el-sub-menu__icon-arrow) {
@@ -212,30 +164,6 @@ function setLayout() {
}
}
<<<<<<< HEAD
/* 水平布局,并与 Navbar 正确配合 */
.sidebar-layout {
display: flex;
flex-direction: row;
align-items: center;
height: 50px;
padding: 0;
width: 100%;
& > .el-menu {
flex: 1;
height: 50px;
min-width: 0;
}
&.has-logo {
display: flex;
flex-direction: row;
align-items: center;
height: 50px;
padding: 0;
width: 100%;
=======
.navbar-container {
flex-shrink: 0;
height: 50px;
@@ -267,7 +195,6 @@ function setLayout() {
min-width: 60px !important;
font-size: 11px;
}
>>>>>>> v1.3
}
}
</style>

View File

@@ -1,38 +1,10 @@
import { createApp } from 'vue';
<<<<<<< HEAD
// 修复 util._extend 已弃用警告(仅在 Node.js 环境中需要)
if (typeof process !== 'undefined' && process.versions && process.versions.node) {
try {
import('util').then(util => {
if (!util._extend) {
util._extend = function(destination, source) {
for (var key in source) {
if (source.hasOwnProperty(key)) {
destination[key] = source[key];
}
}
return destination;
};
}
});
} catch (e) {
console.error('util._extend 补丁加载失败:', e);
}
}
import Cookies from 'js-cookie'
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import 'element-plus/dist/index.css'
=======
import Cookies from 'js-cookie';
// 导入 hiprint 并挂载到全局 window 对象
import { hiprint } from 'vue-plugin-hiprint';
window.hiprint = hiprint;
>>>>>>> v1.3
import ElementPlus from 'element-plus';
import zhCn from 'element-plus/es/locale/lang/zh-cn';
@@ -47,13 +19,8 @@ import router from './router';
import directive from './directive'; // directive
// 注册指令
<<<<<<< HEAD
import plugins from './plugins' // plugins
import { download, downloadGet } from '@/utils/request'
=======
import plugins from './plugins'; // plugins
import { download, downloadGet } from '@/utils/request';
>>>>>>> v1.3
// svg图标
import 'virtual:svg-icons-register';
@@ -108,48 +75,6 @@ if (chrome.webview !== undefined) {
}
// 全局方法挂载
<<<<<<< HEAD
app.config.globalProperties.useDict = useDict
app.config.globalProperties.download = download
app.config.globalProperties.downloadGet = downloadGet
app.config.globalProperties.parseTime = parseTime
app.config.globalProperties.resetForm = resetForm
app.config.globalProperties.handleTree = handleTree
app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels
app.config.globalProperties.formatDateStr = formatDateStr
// 全局挂载请求实例
app.config.globalProperties.$http = request
// 全局组件挂载
app.component('DictTag', DictTag)
app.component('Pagination', Pagination)
app.component('TreeSelect', TreeSelect)
app.component('FileUpload', FileUpload)
app.component('ImageUpload', ImageUpload)
app.component('ImagePreview', ImagePreview)
app.component('RightToolbar', RightToolbar)
app.component('Editor', Editor)
// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
locale: zhCn,
// 支持 large、default、small
size: Cookies.get('size') || 'default'
})
app.use(ElMessage)
app.use(registerComponents)
app.use(router)
app.use(store)
app.use(plugins)
app.use(elementIcons)
app.component('svg-icon', SvgIcon)
directive(app)
// 全局禁止点击遮罩层关闭弹窗
ElDialog.props.closeOnClickModal.default = false;
app.mount('#app')
=======
app.config.globalProperties.useDict = useDict;
app.config.globalProperties.download = download;
app.config.globalProperties.downloadGet = downloadGet;
@@ -187,4 +112,3 @@ app.use(ElementPlus, {
});
app.mount('#app');
>>>>>>> v1.3

View File

@@ -51,15 +51,11 @@ export const constantRoutes = [
component: () => import('@/views/register'),
hidden: true,
},
<<<<<<< HEAD
// 401权限不足路由
=======
{
path: '/:pathMatch(.*)*',
component: () => import('@/views/error/404'),
hidden: true,
},
>>>>>>> v1.3
{
path: '/401',
component: () => import('@/views/error/401'),
@@ -79,11 +75,6 @@ export const constantRoutes = [
},
],
},
<<<<<<< HEAD
// 个人中心路由
=======
>>>>>>> v1.3
{
path: '/user',
component: Layout,
@@ -94,40 +85,6 @@ export const constantRoutes = [
path: 'profile',
component: () => import('@/views/system/user/profile/index'),
name: 'Profile',
<<<<<<< HEAD
meta: { title: '个人中心', icon: 'user' }
}
]
},
// 套餐管理相关路由 - 添加到公共路由确保始终可用
{
path: '/maintainSystem/Inspection/PackageManagement',
component: Layout,
hidden: true,
children: [
{
path: '',
component: () => import('@/views/maintainSystem/Inspection/PackageManagement.vue'),
name: 'DirectPackageManagement',
meta: { title: '套餐管理' }
}
]
},
// {
// path: '/reservationRecord2/appoinmentmanage',
// component: Layout,
// hidden: true,
// children: [
// {
// path: '',
// component: () => import('@/views/appoinmentmanage/clinicRoom/index.vue'),
// name: 'DirectClinicRoom',
// meta: { title: '门诊出诊医生诊室设置' }
// }
// ]
// }
]
=======
meta: { title: '个人中心', icon: 'user' },
},
],
@@ -137,7 +94,6 @@ export const constantRoutes = [
component: () => import('@/views/inpatientNurse/tprSheet/index.vue'),
},
];
>>>>>>> v1.3
// 动态路由 - 基于用户权限动态加载的路由
export const dynamicRoutes = [
@@ -282,15 +238,9 @@ export const dynamicRoutes = [
path: 'set/:tenantId(\\d+)',
component: () => import('@/views/system/tenant/setUser'),
name: 'SetUser',
<<<<<<< HEAD
meta: { title: '所属用户', activeMenu: '/system/tenant' }
}
]
=======
meta: { title: '所属用户', activeMenu: '/system/basicmanage/tenant' },
},
],
>>>>>>> v1.3
},
//租户合同管理路由
{
@@ -303,132 +253,6 @@ export const dynamicRoutes = [
path: 'set/:tenantId(\\d+)',
component: () => import('@/views/system/tenant/setContract'),
name: 'SetContract',
<<<<<<< HEAD
meta: { title: '合同管理', activeMenu: '/system/tenant' }
}
]
},
// 用户角色分配路由
// {
// path: '/system/user-auth',
// component: Layout,
// hidden: true,
// permissions: ['system:user:edit'],
// children: [
// {
// path: 'role/:userId(\\d+)',
// component: () => import('@/views/system/user/authRole'),
// name: 'AuthRole',
// meta: { title: '分配角色', activeMenu: '/system/user' }
// }
// ]
// },
// // 角色用户分配路由
// {
// path: '/system/role-auth',
// component: Layout,
// hidden: true,
// permissions: ['system:role:edit'],
// children: [
// {
// path: 'user/:roleId(\\d+)',
// component: () => import('@/views/system/role/authUser'),
// name: 'AuthUser',
// meta: { title: '分配用户', activeMenu: '/system/role' }
// }
// ]
// },
// // 字典数据路由
// {
// path: '/system/dict-data',
// component: Layout,
// hidden: true,
// permissions: ['system:dict:list'],
// children: [
// {
// path: 'index/:dictId(\\d+)',
// component: () => import('@/views/system/dict/data'),
// name: 'Data',
// meta: { title: '字典数据', activeMenu: '/system/dict' }
// }
// ]
// },
// 系统监控路由
// {
// path: '/monitor',
// component: Layout,
// redirect: '/monitor/operlog',
// name: 'Monitor',
// meta: { title: '系统监控', icon: 'monitor' },
// children: [
// {
// path: 'operlog', // 操作日志路由
// component: () => import('@/views/monitor/operlog/index.vue'),
// name: 'Operlog',
// meta: { title: '操作日志', icon: 'operlog', permissions: ['monitor:operlog:list'] }
// },
// {
// path: 'logininfor', // 登录日志路由
// component: () => import('@/views/monitor/logininfor/index.vue'),
// name: 'Logininfor',
// meta: { title: '登录日志', icon: 'logininfor', permissions: ['monitor:logininfor:list'] }
// },
// {
// path: 'job', // 定时任务路由
// component: () => import('@/views/monitor/job/index.vue'),
// name: 'Job',
// meta: { title: '定时任务', icon: 'job', permissions: ['monitor:job:list'] }
// }
// ]
// },
// 系统工具路由
// {
// path: '/tool',
// component: Layout,
// redirect: '/tool/gen',
// name: 'Tool',
// meta: { title: '系统工具', icon: 'tool' },
// children: [
// {
// path: 'gen', // 代码生成路由
// component: () => import('@/views/tool/gen/index.vue'),
// name: 'Gen',
// meta: { title: '代码生成', icon: 'gen', permissions: ['tool:gen:list'] }
// }
// ]
// },
// 定时任务日志路由
// {
// path: '/monitor/job-log',
// component: Layout,
// hidden: true,
// permissions: ['monitor:job:list'],
// children: [
// {
// path: 'index/:jobId(\\d+)',
// component: () => import('@/views/monitor/job/log'),
// name: 'JobLog',
// meta: { title: '调度日志', activeMenu: '/monitor/job' }
// }
// ]
// },
// 代码生成编辑路由
// {
// path: '/tool/gen-edit',
// component: Layout,
// hidden: true,
// permissions: ['tool:gen:edit'],
// children: [
// {
// path: 'index/:tableId(\\d+)',
// component: () => import('@/views/tool/gen/editTable'),
// name: 'GenEdit',
// meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
// }
// ]
// }
]
=======
meta: { title: '合同管理', activeMenu: '/system/basicmanage/tenant' },
},
],
@@ -504,7 +328,6 @@ export const dynamicRoutes = [
],
},
];
>>>>>>> v1.3
// 合并常量路由和动态路由,确保所有路由都能被访问
const allRoutes = [...constantRoutes, ...dynamicRoutes];

View File

@@ -19,12 +19,7 @@ const useUserStore = defineStore(
roles: [],
permissions: [],
tenantId: '',
<<<<<<< HEAD
hospitalName:'',
status: '' // 用户状态0-启用(管理员), 1-禁用(普通人员)
=======
hospitalName:''
>>>>>>> v1.3
}),
actions: {
// 登录
@@ -69,10 +64,6 @@ const useUserStore = defineStore(
this.avatar = avatar
this.hospitalName = res.optionJson.hospitalName
<<<<<<< HEAD
this.status = user.status // 保存用户状态
=======
>>>>>>> v1.3
resolve(res)
}).catch(error => {
reject(error)

View File

@@ -1,37 +1,17 @@
<template>
<<<<<<< HEAD
<!-- 跌倒/坠床评估护理记录单主容器 -->
<div>
<div class="business">
<!-- 已有记录展示表格 -->
<el-table
=======
<div>
<div class="business">
<!-- <el-table
>>>>>>> v1.3
:data="tableDataSource"
border
stripe
fit
:header-cell-style="{ background: '#f2f2f2', color: 'black' }"
>
<<<<<<< HEAD
<!-- 记录时间列 -->
<el-table-column prop="content.recordTime" label="记录时间" />
<!-- 评估分数列 -->
<el-table-column prop="content.totalScore" label="评估分数" />
<!-- 护理措施列 -->
<el-table-column prop="content.patientCareSessionsTableList" label="护理措施" />
<!-- 责任护士列 -->
<el-table-column prop="content.nurseSignature" label="责任护士" />
<!-- 操作列编辑和删除按钮 -->
=======
<el-table-column prop="content.recordTime" label="记录时间" />
<el-table-column prop="content.totalScore" label="评估分数" />
<el-table-column prop="content.patientCareSessionsTableList" label="护理措施" />
<el-table-column prop="content.nurseSignature" label="责任护士" />
>>>>>>> v1.3
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
@@ -50,20 +30,6 @@
@click="handleDelete(scope.row)"
:disabled="admissionDataForm !== undefined"
>
<<<<<<< HEAD
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 跌倒/坠床评估护理记录单表单区域 -->
<div name="跌倒/坠床评估护理记录单" class="changeMajor" style="width: 99.9%">
<div>
<!-- 表单主体 -->
<el-form ref="formRef" :model="form" style="width: 99.9%">
<!-- 标题行 -->
=======
删除
</el-button>
</template>
@@ -73,7 +39,6 @@
<div name="跌倒/坠床评估护理记录单" class="changeMajor" style="width: 99.9%">
<div>
<el-form ref="formRef" :model="form" style="width: 99.9%">
>>>>>>> v1.3
<el-form-item style="text-align: center">
<div
style="
@@ -89,18 +54,10 @@
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 日期时间选择器 -->
=======
>>>>>>> v1.3
<el-form-item label="日期:" class="changeMajorFromItem" style="width: 100%">
<el-row :span="20">
<el-col :span="8" style="padding-left: 0px !important">
<el-form-item>
<<<<<<< HEAD
<!-- 日期时间选择器 -->
=======
>>>>>>> v1.3
<el-date-picker
v-model="form.ZKDATE"
type="datetime"
@@ -110,10 +67,6 @@
style="width: 800px"
:disabled="admissionDataForm !== undefined"
/>
<<<<<<< HEAD
<!-- 时间选择器被注释掉 -->
=======
>>>>>>> v1.3
<!-- <span style="margin-left: 5px">时间</span>
<el-time-picker
v-model="form.ZKTIME"
@@ -124,10 +77,6 @@
/> -->
</el-form-item>
</el-col>
<<<<<<< HEAD
<!-- 新增/保存按钮 -->
=======
>>>>>>> v1.3
<el-col :span="5">
<el-button
v-if="!updateFlag"
@@ -151,10 +100,6 @@
</el-row>
</el-form-item>
<<<<<<< HEAD
<!-- 危险因素评估表格 -->
=======
>>>>>>> v1.3
<el-form-item style="padding-top: 10px; margin: 0px !important">
<el-table
:data="dangerData"
@@ -162,10 +107,6 @@
:span-method="handleSpan"
style="text-align: center"
>
<<<<<<< HEAD
<!-- 动态生成表格列 -->
=======
>>>>>>> v1.3
<el-table-column
v-for="column in dangerColumns"
:key="column.key"
@@ -174,10 +115,6 @@
:label="column.title"
align="center"
/>
<<<<<<< HEAD
<!-- 选择列复选框 -->
=======
>>>>>>> v1.3
<el-table-column prop="id" label="选择" width="80" align="center">
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleDangerChange(row)" />
@@ -186,10 +123,6 @@
</el-table>
</el-form-item>
<<<<<<< HEAD
<!-- 总分显示 -->
=======
>>>>>>> v1.3
<el-form-item
style="text-align: center; margin-bottom: 0px; padding: 0px"
class="changeMajorFromItem"
@@ -202,10 +135,6 @@
</el-row>
</el-form-item>
<<<<<<< HEAD
<!-- 护理措施表格 -->
=======
>>>>>>> v1.3
<el-form-item style="padding-top: 10px">
<el-table
:data="nursingData"
@@ -213,10 +142,6 @@
:span-method="arraySpanMethod"
style="width: 100%"
>
<<<<<<< HEAD
<!-- 动态生成表格列 -->
=======
>>>>>>> v1.3
<el-table-column
v-for="column in nursingColumns"
:key="column.key"
@@ -225,10 +150,6 @@
:label="column.title"
align="center"
/>
<<<<<<< HEAD
<!-- 选择列复选框 -->
=======
>>>>>>> v1.3
<el-table-column prop="id" label="选择" width="80" align="center">
<template #default="{ row }">
<el-checkbox v-model="row.checked" @change="handleNursingChange(row)" />
@@ -237,10 +158,6 @@
</el-table>
</el-form-item>
<<<<<<< HEAD
<!-- 护士签字输入框 -->
=======
>>>>>>> v1.3
<el-form-item
style="text-align: center; margin-bottom: 0px; padding: 0px"
class="changeMajorFromItem"
@@ -260,10 +177,6 @@
</el-row>
</el-form-item>
<<<<<<< HEAD
<!-- 备注信息 -->
=======
>>>>>>> v1.3
<el-form-item>
<el-row :span="20">
<el-col :span="5">
@@ -284,26 +197,6 @@
</template>
<script setup>
<<<<<<< HEAD
// 组件选项定义
defineOptions({
name: '跌倒/坠床评估护理记录单',
});
// 导入所需模块
import { ref, reactive, computed, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
// 使用路由相关功能
const route = useRoute();
const router = useRouter();
// 定义引用变量
const queryRef = ref();
const formRef = ref();
// 基本数据变量
=======
defineOptions({
name: 'FallBedFallAssessment',
});
@@ -328,7 +221,6 @@ const router = useRouter();
const queryRef = ref();
const formRef = ref();
>>>>>>> v1.3
const wardCode = ref('');
const patientId = ref('');
const visitId = ref('');
@@ -342,20 +234,6 @@ const totalScore = ref(0);
const lastSubmit = ref('');
const admissionDataForm = ref(route.params.admissionData);
<<<<<<< HEAD
// 表单数据模型
const form = reactive({
ZKDATE: '', // 日期
ZKTIME: '', // 时间
recordTime: '', // 记录时间
totalScore: 0, // 总分
bedFallRiskAssessmentList: [], // 跌倒风险评估列表
nurseSignature: '', // 护士签名
patientCareSessionsCheckedList: [], // 护理措施选中列表
});
// 危险因素表格列配置
=======
const form = reactive({
ZKDATE: '',
ZKTIME: '',
@@ -367,7 +245,6 @@ const form = reactive({
});
// 危险因素表格列
>>>>>>> v1.3
const dangerColumns = [
{
key: 'content',
@@ -432,11 +309,7 @@ const dangerData = ref([
{ id: '27', evalContent: '麻醉止痛剂', score: 2, checked: false },
]);
<<<<<<< HEAD
// 护理措施表格列配置
=======
// 护理措施表格列
>>>>>>> v1.3
const nursingColumns = [
{
key: 'content',
@@ -473,33 +346,21 @@ const instructions = [
'3.评分≥5高度风险每周至少评估一次需采取适宜的预防措施同时填写《预防患者跌倒/坠床知情告知书》',
];
<<<<<<< HEAD
// 计算属性:计算选中的危险因素总分
=======
// 计算属性
>>>>>>> v1.3
const calculate = computed(() => {
return dangerData.value
.filter((option) => option.checked)
.reduce((total, option) => total + option.score, 0);
});
<<<<<<< HEAD
// 计算属性:判断表单是否为空
=======
>>>>>>> v1.3
const isFormEmpty = computed(() => {
return (
form.ZKDATE === '' && form.ZKTIME === '' && form.recordTime === '' && form.nurseSignature === ''
);
});
<<<<<<< HEAD
// 危险因素选择变化处理函数
=======
// 方法 - 不再需要handleData方法通过表单输入和按钮加载数据
>>>>>>> v1.3
const handleDangerChange = (row) => {
totalScore.value = calculate.value;
form.bedFallRiskAssessmentList = dangerData.value
@@ -507,20 +368,12 @@ const handleDangerChange = (row) => {
.map((item) => item.id);
};
<<<<<<< HEAD
// 护理措施选择变化处理函数
=======
>>>>>>> v1.3
const handleNursingChange = (row) => {
form.patientCareSessionsCheckedList = nursingData.value
.filter((item) => item.checked)
.map((item) => item.id);
};
<<<<<<< HEAD
// 初始化函数:加载模拟数据
=======
>>>>>>> v1.3
const init = async () => {
// 使用模拟数据不再调用后端API
try {
@@ -582,10 +435,6 @@ const init = async () => {
}
};
<<<<<<< HEAD
// 危险因素表格合并单元格处理函数
=======
>>>>>>> v1.3
const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
if (columnIndex === 0) {
if (rowIndex === 0) {
@@ -632,10 +481,6 @@ const handleSpan = ({ row, column, rowIndex, columnIndex }) => {
return [1, 1];
};
<<<<<<< HEAD
// 护理措施表格合并单元格处理函数
=======
>>>>>>> v1.3
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
// 护理措施
if (columnIndex === 0) {
@@ -652,14 +497,8 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
return [1, 1];
};
<<<<<<< HEAD
// 提交表单处理函数
const onSubmit = async () => {
// 检查上次提交时间,防止重复提交
=======
const onSubmit = async () => {
// 检查上次提交时间
>>>>>>> v1.3
if (lastSubmit.value && new Date() - lastSubmit.value < 2000) {
ElMessage.error('禁止重复提交!');
return;
@@ -684,16 +523,6 @@ const onSubmit = async () => {
if (isFormEmpty.value) {
ElMessage.error('请填写跌倒/坠床评估护理记录单后再进行操作');
<<<<<<< HEAD
} else {
form.totalScore = totalScore.value;
// 模拟保存数据不再调用后端API
console.log('保存的数据:', form);
if (updateFlag.value) {
// 模拟更新操作
=======
return;
}
@@ -720,35 +549,22 @@ const onSubmit = async () => {
// 更新本地数据
if (updateFlag.value) {
// 更新操作
>>>>>>> v1.3
const updatedIndex = tableDataSource.value.findIndex((item) => item.id === updateId.value);
if (updatedIndex !== -1) {
tableDataSource.value[updatedIndex].content = { ...form };
}
<<<<<<< HEAD
ElMessage.success('模拟更新成功');
} else {
// 模拟新增操作
=======
ElMessage.success('更新成功');
} else {
// 新增操作
>>>>>>> v1.3
const newRecord = {
id: Date.now().toString(),
content: { ...form },
};
tableDataSource.value.unshift(newRecord);
<<<<<<< HEAD
ElMessage.success('模拟新增成功');
}
=======
ElMessage.success('保存成功');
}
// 处理返回逻辑
>>>>>>> v1.3
if (admissionDataForm.value !== undefined) {
const admissionDataBack = JSON.parse(admissionDataForm.value);
admissionDataBack.project2 = totalScore.value;
@@ -769,13 +585,6 @@ const onSubmit = async () => {
}
}
<<<<<<< HEAD
reset();
}
};
// 编辑记录处理函数
=======
// 重置表单
reset();
} catch (error) {
@@ -784,7 +593,6 @@ const onSubmit = async () => {
}
};
>>>>>>> v1.3
const handleUpdate = (row) => {
const loginUser = JSON.parse(window.localStorage.getItem('loginUser'));
@@ -814,10 +622,6 @@ const handleUpdate = (row) => {
}
};
<<<<<<< HEAD
// 重置表单函数
=======
>>>>>>> v1.3
const reset = () => {
Object.assign(form, {
ZKDATE: '',
@@ -850,10 +654,6 @@ const reset = () => {
}
};
<<<<<<< HEAD
// 删除记录处理函数
=======
>>>>>>> v1.3
const handleDelete = (row) => {
const loginUser = JSON.parse(window.localStorage.getItem('loginUser'));
@@ -877,10 +677,6 @@ const handleDelete = (row) => {
}
};
<<<<<<< HEAD
// 打印预览函数(暂未实现)
=======
>>>>>>> v1.3
const dc_ajax_preview = () => {
var args = {
report: urlAddRandomNo('./grf/NurseRecord_Pressure_208.grf'),
@@ -891,10 +687,6 @@ const dc_ajax_preview = () => {
webapp_ws_ajax_run(args);
};
<<<<<<< HEAD
// 数据转换函数,用于报表打印
=======
>>>>>>> v1.3
const transformData = () => {
const jsonDate = [...tableDataSource.value];
@@ -1041,11 +833,7 @@ const transformData = () => {
return transformedData;
};
<<<<<<< HEAD
// 组件挂载后执行的生命周期函数
=======
// 生命周期钩子
>>>>>>> v1.3
onMounted(() => {
try {
// 安全获取用户信息
@@ -1058,9 +846,6 @@ onMounted(() => {
wardCode.value = window.localStorage.getItem('wardInfo') || '';
admissionDataForm.value = route.params.admissionData;
<<<<<<< HEAD
// 自动初始化表格数据不再依赖患者ID参数
=======
// 获取患者信息
if (patientInfo.value) {
patientId.value = patientInfo.value.patientId || '';
@@ -1068,7 +853,6 @@ onMounted(() => {
}
// 自动初始化表格数据
>>>>>>> v1.3
// 延迟执行,确保所有数据都已初始化
setTimeout(() => {
init();
@@ -1081,28 +865,17 @@ onMounted(() => {
}, 100);
}
});
<<<<<<< HEAD
</script>
<style scoped>
/* 页面样式定义 */
=======
// 暴露接口
defineExpose({ form, submit: onSubmit, reset });
</script>
<style scoped>
>>>>>>> v1.3
.business {
background: white;
border-radius: 5px;
padding: 10px 16px;
<<<<<<< HEAD
height: calc(100vh - var(--barHeight) * 1px - 50px);
=======
height: calc(100vh - 250px);
>>>>>>> v1.3
overflow: auto;
display: grid;
grid-row-gap: 16px;
@@ -1161,14 +934,4 @@ defineExpose({ form, submit: onSubmit, reset });
margin-bottom: 0px !important;
}
}
<<<<<<< HEAD
/* 备注信息列表样式 */
.instructions-list {
list-style-type: none;
padding-left: 0;
}
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -2,15 +2,6 @@
<div class="hospital-record-form">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="病案首页(一)" name="first">
<<<<<<< HEAD
<medicalRecordFirst :formData="formData"></medicalRecordFirst>
</el-tab-pane>
<el-tab-pane label="病案首页(二)" name="second">
<medicalRecordSecond :formData="formData"></medicalRecordSecond>
</el-tab-pane>
<el-tab-pane label="病案附页(一)" name="third">
<medicalRecordThird :formData="formData"></medicalRecordThird>
=======
<medicalRecordFirst
ref="firstRef"
:formData="formData"
@@ -28,16 +19,10 @@
:formData="formData"
@onCaseThird="updateCaseFirstDatas"
></medicalRecordThird>
>>>>>>> v1.3
</el-tab-pane>
</el-tabs>
<div class="form-footer">
<<<<<<< HEAD
<button @click="printForm" class="print-btn">打印表单</button>
<button @click="resetForm" class="reset-btn">重置表单</button>
</div>
=======
<!-- <button @click="printForm" class="print-btn">打印表单</button> -->
<button @click="resetForm" class="reset-btn">重置表单</button>
</div>
@@ -45,7 +30,6 @@
<!-- <el-drawer v-model="drawer" size="100%">
<medicalRecordPrint ref="recordPrintRef"></medicalRecordPrint>
</el-drawer> -->
>>>>>>> v1.3
</div>
</template>
@@ -53,12 +37,8 @@
defineOptions({
name: 'HospitalRecordForm',
});
<<<<<<< HEAD
import { ref, reactive } from 'vue';
=======
import { ref, reactive, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
>>>>>>> v1.3
// import medicalRecordFirst from './components/medicalRecordFirst.vue';
import medicalRecordFirst from '@/views/hospitalRecord/components/medicalRecordFirst.vue';
import medicalRecordSecond from '@/views/hospitalRecord/components/medicalRecordSecond.vue';
@@ -66,121 +46,6 @@ import medicalRecordThird from '@/views/hospitalRecord/components/medicalRecordT
import medicalRecordFirstPrint from '@/views/hospitalRecord/components/medicalRecordFirstPrint.json';
import medicalRecordSecondPrint from '@/views/hospitalRecord/components/medicalRecordSecondPrint.json';
import medicalRecordThirdPrint from '@/views/hospitalRecord/components/medicalRecordThirdPrint.json';
<<<<<<< HEAD
// 表单数据
const formData = reactive({
hospital: {
orgCode: '41275054-7',
paymentMethod: '城乡居民基本医疗保险'
},
patient: {
healthCardNo: '',
name: '',
gender: '',
birthDate: '',
age: '',
nationality: '中国',
nativePlace: '',
ethnicity: '汉族',
idCardNo: '',
householdAddress: '',
workUnit: '',
contactName: '',
contactRelation: '',
contactAddress: '',
contactPhone: ''
},
admission: {
times: 1,
hospitalNo: '',
recordNo: '',
channel: '',
admitTime: '',
department: '',
ward: '',
confirmDate: '',
dischargeTime: '',
dischargeDepartment: '',
dischargeWard: '',
hospitalDays: ''
},
diagnosis: {
mainDiagnosis: '',
otherDiagnosis: ''
},
medicalInfo: {
bloodTransfusion: '2',
bloodType: '',
rhType: '',
drugAllergy: '1'
},
doctorInfo: {
departmentDirector: '',
chiefPhysician: '',
attendingPhysician: '',
residentPhysician: '',
chargeNurse: '',
chiefResident: '',
intern: '',
recordQuality: '1',
coder: '',
qualityControlDate: ''
}
});
const activeName = ref('first');
// 打印表单
const printForm = () => {
// 创建一个新的打印窗口
const printWindow = window.open('', '_blank');
let printContent
// 获取模板字符串并替换转义的插值标记
if(activeName.value == 'first') {
printContent = medicalRecordFirstPrint.printContent;
}else if(activeName.value == 'second') {
printContent = medicalRecordSecondPrint.printContent;
}else {
printContent = medicalRecordThirdPrint.printContent;
}
// 这里可以进行实际的数据替换操作
printContent = printContent.replace(/\$\{([^}]+)\}/g, (match, expr) => {
// 简单示例实际应根据expr内容进行数据提取
return eval(expr); // 注意实际使用中应避免eval这里仅为示例
});
// 将内容写入打印窗口并打印
printWindow.document.write(printContent);
printWindow.document.close();
}
function handleClick() {
}
// 重置表单
const resetForm = () => {
Object.keys(formData).forEach(key => {
if (typeof formData[key] === 'object') {
Object.keys(formData[key]).forEach(subKey => {
formData[key][subKey] = '';
});
} else {
formData[key] = '';
}
});
// 重置默认值
formData.hospital.orgCode = '41275054-7';
formData.hospital.paymentMethod = '城乡居民基本医疗保险';
formData.patient.nationality = '中国';
formData.patient.ethnicity = '汉族';
formData.admission.times = 1;
formData.medicalInfo.bloodTransfusion = '2';
formData.medicalInfo.drugAllergy = '1';
formData.doctorInfo.recordQuality = '1';
};
=======
import formDataJs from '../views/doctorstation/components/store/medicalpage';
import medicalRecordPrint from '../views/hospitalRecord/components/medicalRecordPrint.vue';
import { previewPrint } from '../utils/printUtils';
@@ -790,7 +655,6 @@ defineExpose({
setFormData,
printFun,
});
>>>>>>> v1.3
</script>
<style scoped>
@@ -860,13 +724,9 @@ label {
font-size: 14px;
}
<<<<<<< HEAD
input, select, textarea {
=======
input,
select,
textarea {
>>>>>>> v1.3
width: 100%;
padding: 8px;
border: 1px solid #ccc;
@@ -887,12 +747,8 @@ textarea {
margin-top: 30px;
}
<<<<<<< HEAD
.print-btn, .reset-btn {
=======
.print-btn,
.reset-btn {
>>>>>>> v1.3
padding: 10px 20px;
margin: 0 10px;
border: none;
@@ -902,11 +758,7 @@ textarea {
}
.print-btn {
<<<<<<< HEAD
background-color: #4CAF50;
=======
background-color: #4caf50;
>>>>>>> v1.3
color: white;
}
@@ -937,8 +789,4 @@ textarea {
margin: 2cm;
}
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -1,14 +1,9 @@
<template>
<div class="medical-form">
<<<<<<< HEAD
<h2 style="text-align: center;">{{ userStore.hospitalName || '长春市朝阳区中医院' }} -入院记录</h2>
=======
<h2 style="text-align: center">
{{ userStore.hospitalName || '长春市朝阳区中医院' }} -入院记录
</h2>
>>>>>>> v1.3
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
<el-form
@@ -23,23 +18,6 @@
<h4 class="section-title">基础信息</h4>
<div class="adaptive-grid form-section">
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<<<<<<< HEAD
<el-input
v-model="formData.patientName"
placeholder="请输入姓名"
clearable
/>
</el-form-item>
<el-form-item label="住院号" prop="hospitalNo" class="grid-item required">
<el-input
v-model="formData.hospitalNo"
placeholder="请输入住院号"
clearable
/>
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择" style="width: 100%;">
=======
<el-input v-model="formData.patientName" placeholder="请输入姓名" clearable />
</el-form-item>
<el-form-item label="住院号" prop="hospitalNo" class="grid-item required">
@@ -47,43 +25,17 @@
</el-form-item>
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择" style="width: 100%">
>>>>>>> v1.3
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</el-form-item>
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
<<<<<<< HEAD
<el-input
v-model.number="formData.age"
placeholder="请输入年龄"
clearable
/>
=======
<el-input v-model.number="formData.age" placeholder="请输入年龄" clearable />
>>>>>>> v1.3
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="民族" prop="nation" class="grid-item">
<<<<<<< HEAD
<el-input
v-model="formData.nation"
placeholder="请输入民族"
clearable
/>
</el-form-item>
<el-form-item label="职业" prop="occupation" class="grid-item">
<el-input
v-model="formData.occupation"
placeholder="请输入职业"
clearable
/>
</el-form-item>
<el-form-item label="婚姻状况" prop="marriage" class="grid-item">
<el-select v-model="formData.marriage" placeholder="请选择" clearable style="width: 100%;">
=======
<el-input v-model="formData.nation" placeholder="请输入民族" clearable />
</el-form-item>
<el-form-item label="职业" prop="occupation" class="grid-item">
@@ -96,48 +48,12 @@
clearable
style="width: 100%"
>
>>>>>>> v1.3
<el-option label="已婚" value="已婚"></el-option>
<el-option label="未婚" value="未婚"></el-option>
<el-option label="离异" value="离异"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出生地" prop="birthplace" class="grid-item">
<<<<<<< HEAD
<el-input
v-model="formData.birthplace"
placeholder="请输入出生地"
clearable
/>
</el-form-item>
<el-form-item label="入院时间" prop="admissionTime" class="grid-item required">
<el-date-picker
v-model="formData.admissionTime"
type="datetime"
placeholder="选择入院时间"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%;"
/>
</el-form-item>
<el-form-item label="记录时间" prop="recordTime" class="grid-item required">
<el-date-picker
v-model="formData.recordTime"
type="datetime"
placeholder="选择记录时间"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%;"
/>
</el-form-item>
<el-form-item label="病史陈述者" prop="historyReporter" class="grid-item">
<el-input
v-model="formData.historyReporter"
placeholder="请输入陈述者"
clearable
/>
</el-form-item>
<el-form-item label="可靠程度" prop="reliability" class="grid-item">
<el-select v-model="formData.reliability" placeholder="请选择" style="width: 100%;">
=======
<el-input v-model="formData.birthplace" placeholder="请输入出生地" clearable />
</el-form-item>
<el-form-item label="入院时间" prop="admissionTime" class="grid-item required">
@@ -163,7 +79,6 @@
</el-form-item>
<el-form-item label="可靠程度" prop="reliability" class="grid-item">
<el-select v-model="formData.reliability" placeholder="请选择" style="width: 100%">
>>>>>>> v1.3
<el-option label="可靠" value="可靠"></el-option>
<el-option label="基本可靠" value="基本可靠"></el-option>
<el-option label="不可靠" value="不可靠"></el-option>
@@ -175,137 +90,76 @@
<h4 class="section-title">病史信息</h4>
<div class="form-section">
<el-form-item label="主诉" prop="complaint" class="history-item required">
<<<<<<< HEAD
<el-input
v-model="formData.complaint"
type="textarea"
placeholder="请输入主诉"
=======
<el-input
v-model="formData.complaint"
type="textarea"
placeholder="请输入主诉"
>>>>>>> v1.3
autosize
maxlength="200"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="现病史" prop="presentIllness" class="history-item">
<el-input
v-model="formData.presentIllness"
type="textarea"
placeholder="请详细描述现病史"
=======
<el-form-item label="现病史" prop="presentIllness" class="history-item">
<el-input
v-model="formData.presentIllness"
type="textarea"
placeholder="请详细描述现病史"
>>>>>>> v1.3
autosize
maxlength="1000"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="既往史" prop="pastHistory" class="history-item">
<el-input
v-model="formData.pastHistory"
type="textarea"
placeholder="请输入既往史"
=======
<el-form-item label="既往史" prop="pastHistory" class="history-item">
<el-input
v-model="formData.pastHistory"
type="textarea"
placeholder="请输入既往史"
>>>>>>> v1.3
autosize
maxlength="800"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="个人史" prop="personalHistory" class="history-item">
<el-input
v-model="formData.personalHistory"
type="textarea"
placeholder="请输入个人史"
=======
<el-form-item label="个人史" prop="personalHistory" class="history-item">
<el-input
v-model="formData.personalHistory"
type="textarea"
placeholder="请输入个人史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="婚育史" prop="maritalHistory" class="history-item">
<el-input
v-model="formData.maritalHistory"
type="textarea"
placeholder="请输入婚育史"
=======
<el-form-item label="婚育史" prop="maritalHistory" class="history-item">
<el-input
v-model="formData.maritalHistory"
type="textarea"
placeholder="请输入婚育史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="月经史" prop="menstrualHistory" class="history-item">
<el-input
v-model="formData.menstrualHistory"
type="textarea"
placeholder="请输入月经史"
=======
<el-form-item label="月经史" prop="menstrualHistory" class="history-item">
<el-input
v-model="formData.menstrualHistory"
type="textarea"
placeholder="请输入月经史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="家族史" prop="familyHistory" class="history-item">
<el-input
v-model="formData.familyHistory"
type="textarea"
placeholder="请输入家族史"
=======
<el-form-item label="家族史" prop="familyHistory" class="history-item">
<el-input
v-model="formData.familyHistory"
type="textarea"
placeholder="请输入家族史"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
@@ -317,17 +171,10 @@
<h4 class="section-title">中医望闻问切</h4>
<div class="form-section">
<el-form-item label="望闻问切" prop="tcmInfo" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.tcmInfo"
type="textarea"
placeholder="请输入中医望闻问切结果"
=======
<el-input
v-model="formData.tcmInfo"
type="textarea"
placeholder="请输入中医望闻问切结果"
>>>>>>> v1.3
autosize
maxlength="600"
show-word-limit
@@ -341,33 +188,16 @@
<div class="adaptive-grid">
<el-form-item label="体温" prop="temp" class="grid-item">
<div class="input-with-unit">
<<<<<<< HEAD
<el-input
v-model.number="formData.temp"
type="number"
step="0.1"
placeholder="如36.0"
=======
<el-input
v-model.number="formData.temp"
type="number"
step="0.1"
placeholder="如36.0"
>>>>>>> v1.3
clearable
/>
<span class="unit"></span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="脉搏" prop="pulse" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.pulse"
type="number"
placeholder="如76"
=======
<el-form-item label="脉搏" prop="pulse" class="grid-item">
<div class="input-with-unit">
@@ -375,21 +205,11 @@
v-model.number="formData.pulse"
type="number"
placeholder="如76"
>>>>>>> v1.3
clearable
/>
<span class="unit">/</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="呼吸" prop="respiration" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.respiration"
type="number"
placeholder="如16"
=======
<el-form-item label="呼吸" prop="respiration" class="grid-item">
<div class="input-with-unit">
@@ -397,42 +217,23 @@
v-model.number="formData.respiration"
type="number"
placeholder="如16"
>>>>>>> v1.3
clearable
/>
<span class="unit">/</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="血压" prop="bp" class="grid-item">
<div class="input-with-unit">
<el-input
v-model="formData.bp"
placeholder="如188/94"
=======
<el-form-item label="血压" prop="bp" class="grid-item">
<div class="input-with-unit">
<el-input
v-model="formData.bp"
placeholder="如188/94"
>>>>>>> v1.3
clearable
@blur="validateBloodPressure"
/>
<span class="unit">mmHg</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="身高" prop="height" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.height"
type="number"
placeholder="如165"
=======
<el-form-item label="身高" prop="height" class="grid-item">
<div class="input-with-unit">
@@ -440,21 +241,11 @@
v-model.number="formData.height"
type="number"
placeholder="如165"
>>>>>>> v1.3
clearable
/>
<span class="unit">cm</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="体重" prop="weight" class="grid-item">
<div class="input-with-unit">
<el-input
v-model.number="formData.weight"
type="number"
placeholder="如79"
=======
<el-form-item label="体重" prop="weight" class="grid-item">
<div class="input-with-unit">
@@ -462,124 +253,69 @@
v-model.number="formData.weight"
type="number"
placeholder="如79"
>>>>>>> v1.3
clearable
/>
<span class="unit">kg</span>
</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="BMI" prop="bmi" class="grid-item">
<div class="input-with-unit">
<el-input
v-model="formData.bmi"
placeholder="如29.02"
readonly
/>
=======
<el-form-item label="BMI" prop="bmi" class="grid-item">
<div class="input-with-unit">
<el-input v-model="formData.bmi" placeholder="如29.02" readonly />
>>>>>>> v1.3
<span class="unit">kg/</span>
</div>
</el-form-item>
</div>
<el-form-item label="一般情况" prop="general" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.general"
type="textarea"
placeholder="请输入一般情况"
=======
<el-input
v-model="formData.general"
type="textarea"
placeholder="请输入一般情况"
>>>>>>> v1.3
autosize
maxlength="300"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="皮肤粘膜" prop="skin" class="history-item">
<el-input
v-model="formData.skin"
type="textarea"
placeholder="请输入皮肤粘膜情况"
=======
<el-form-item label="皮肤粘膜" prop="skin" class="history-item">
<el-input
v-model="formData.skin"
type="textarea"
placeholder="请输入皮肤粘膜情况"
>>>>>>> v1.3
autosize
maxlength="300"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="胸部(心、肺)" prop="chest" class="history-item">
<el-input
v-model="formData.chest"
type="textarea"
placeholder="请输入胸部检查结果"
=======
<el-form-item label="胸部(心、肺)" prop="chest" class="history-item">
<el-input
v-model="formData.chest"
type="textarea"
placeholder="请输入胸部检查结果"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="腹部" prop="abdomen" class="history-item">
<el-input
v-model="formData.abdomen"
type="textarea"
placeholder="请输入腹部检查结果"
=======
<el-form-item label="腹部" prop="abdomen" class="history-item">
<el-input
v-model="formData.abdomen"
type="textarea"
placeholder="请输入腹部检查结果"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="四肢/神经系统" prop="limbsNervous" class="history-item">
<el-input
v-model="formData.limbsNervous"
type="textarea"
placeholder="请输入四肢及神经系统检查结果"
=======
<el-form-item label="四肢/神经系统" prop="limbsNervous" class="history-item">
<el-input
v-model="formData.limbsNervous"
type="textarea"
placeholder="请输入四肢及神经系统检查结果"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
@@ -591,17 +327,10 @@
<h4 class="section-title">辅助检查</h4>
<div class="form-section">
<el-form-item label="检查结果" prop="auxExam" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.auxExam"
type="textarea"
placeholder="请输入辅助检查结果"
=======
<el-input
v-model="formData.auxExam"
type="textarea"
placeholder="请输入辅助检查结果"
>>>>>>> v1.3
autosize
maxlength="1000"
show-word-limit
@@ -613,37 +342,21 @@
<h4 class="section-title">初步诊断</h4>
<div class="form-section">
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="history-item">
<<<<<<< HEAD
<el-input
v-model="formData.tcmDiagnosis"
type="textarea"
placeholder="如:胸痹心痛(气阴两虚证)"
=======
<el-input
v-model="formData.tcmDiagnosis"
type="textarea"
placeholder="如:胸痹心痛(气阴两虚证)"
>>>>>>> v1.3
autosize
maxlength="500"
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="西医诊断" prop="westernDiagnosis" class="history-item">
<el-input
v-model="formData.westernDiagnosis"
type="textarea"
placeholder="如1.冠状动脉粥样硬化性心脏病"
=======
<el-form-item label="西医诊断" prop="westernDiagnosis" class="history-item">
<el-input
v-model="formData.westernDiagnosis"
type="textarea"
placeholder="如1.冠状动脉粥样硬化性心脏病"
>>>>>>> v1.3
autosize
maxlength="800"
show-word-limit
@@ -653,32 +366,6 @@
<!-- 7. 签名信息三列布局 -->
<h4 class="section-title">签名信息</h4>
<<<<<<< HEAD
<div class="adaptive-grid form-section" style="grid-template-columns: repeat(3, 1fr);">
<el-form-item label="医师签名" prop="doctorSign" class="grid-item">
<el-input
v-model="formData.doctorSign"
placeholder="请签名"
clearable
/>
</el-form-item>
<el-form-item label="上级医师签名" prop="superiorSign" class="grid-item">
<el-input
v-model="formData.superiorSign"
placeholder="请签名"
clearable
/>
</el-form-item>
<el-form-item label="记录日期" prop="signDate" class="grid-item">
<el-date-picker
v-model="formData.signDate"
type="datetime"
placeholder="选择日期"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%;"
=======
<div class="adaptive-grid form-section" style="grid-template-columns: repeat(3, 1fr)">
<el-form-item label="医师签名" prop="doctorSign" class="grid-item">
<el-input v-model="formData.doctorSign" placeholder="请签名" clearable />
@@ -695,7 +382,6 @@
placeholder="选择日期"
value-format="YYYY-MM-DD HH:mm"
style="width: 100%"
>>>>>>> v1.3
/>
</el-form-item>
</div>
@@ -707,22 +393,11 @@
</el-form>
</div>
</div>
<<<<<<< HEAD
=======
<admissionRecord v-if="isShowprintDom" ref="recordPrintRef"></admissionRecord>
>>>>>>> v1.3
</template>
<script setup>
import { ref, reactive, watch, onMounted } from 'vue';
<<<<<<< HEAD
import { ElInput, ElSelect, ElOption, ElDatePicker, ElButton, ElMessage, ElMessageBox, ElForm, ElFormItem } from 'element-plus';
import useUserStore from '../store/modules/user';
defineOptions({
name: 'InHospitalRecord',
components: { ElInput, ElSelect, ElOption, ElDatePicker, ElButton, ElForm, ElFormItem }
=======
import { previewPrint } from '../utils/printUtils';
import admissionRecord from '../views/hospitalRecord/components/admissionRecord.vue';
import {
@@ -742,7 +417,6 @@ const recordPrintRef = ref();
defineOptions({
name: 'InHospitalRecord',
components: { ElInput, ElSelect, ElOption, ElDatePicker, ElButton, ElForm, ElFormItem },
>>>>>>> v1.3
});
// Props与事件
@@ -768,28 +442,6 @@ const formData = reactive({
gender: patient?.genderEnum_enumText || '',
age: patient?.age || '',
nation: '',
<<<<<<< HEAD
occupation: '',// 职业
marriage: '',// 婚姻状况
birthplace: '',// 出生地
admissionTime: '',// 入院时间
recordTime: '',// 记录时间
historyReporter: '',// 病史陈述者
reliability: '可靠',// 可靠程度
// 病史信息
complaint: '',// 主诉
presentIllness: '',// 现病史
pastIllness: '',// 既往史
personalHistory: '',// 个人史
allergyHistory: '',// 过敏史
pastHistory: '',// 既往史
familyHistory: '',// 家族史
maritalHistory: '',// 婚姻史
menstrualHistory: '',// 月经史
// 中医信息
tcmInfo: '',
=======
occupation: '', // 职业
marriage: '', // 婚姻状况
birthplace: '', // 出生地
@@ -810,7 +462,6 @@ const formData = reactive({
// 中医信息
tcmInfo: '',
>>>>>>> v1.3
// 体格检查
temp: '',
pulse: '',
@@ -824,20 +475,6 @@ const formData = reactive({
chest: '',
abdomen: '',
limbsNervous: '',
<<<<<<< HEAD
// 辅助检查
auxExam: '',
// 诊断信息
tcmDiagnosis: '',
westernDiagnosis: '',
// 签名信息
doctorSign: '',
superiorSign: '',
signDate: ''
=======
// 辅助检查
auxExam: '',
@@ -850,35 +487,10 @@ const formData = reactive({
doctorSign: '',
superiorSign: '',
signDate: '',
>>>>>>> v1.3
});
// 表单校验规则
const rules = reactive({
<<<<<<< HEAD
name: [
{ required: true, message: '请填写姓名', trigger: ['blur', 'submit'] }
],
hospitalNo: [
{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }
],
gender: [
{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }
],
age: [
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
{ type: 'number', min: 1, max: 120, message: '年龄需在1-120岁之间', trigger: ['blur', 'submit'] }
],
admissionTime: [
{ required: true, message: '请选择入院时间', trigger: ['change', 'submit'] }
],
recordTime: [
{ required: true, message: '请选择记录时间', trigger: ['change', 'submit'] }
],
chiefComplaint: [
{ required: true, message: '请填写主诉', trigger: ['blur', 'submit'] }
]
=======
name: [{ required: true, message: '请填写姓名', trigger: ['blur', 'submit'] }],
hospitalNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
@@ -895,7 +507,6 @@ const rules = reactive({
admissionTime: [{ required: true, message: '请选择入院时间', trigger: ['change', 'submit'] }],
recordTime: [{ required: true, message: '请选择记录时间', trigger: ['change', 'submit'] }],
chiefComplaint: [{ required: true, message: '请填写主诉', trigger: ['blur', 'submit'] }],
>>>>>>> v1.3
});
// 生命周期
@@ -912,19 +523,11 @@ onMounted(() => {
}
if (!formData.patientName) {
formData.patientName = patient?.patientName || '';
<<<<<<< HEAD
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
=======
}
if (!formData.gender) {
formData.gender = patient?.genderEnum_enumText || '';
}
if (!formData.age) {
>>>>>>> v1.3
formData.age = patient?.age || '';
}
if (!formData.hospitalNo) {
@@ -943,23 +546,6 @@ watch([() => formData.height, () => formData.weight], ([newHeight, newWeight]) =
});
// 入院时间变化处理
<<<<<<< HEAD
watch(() => formData.admissionTime, (val) => {
if (val && !formData.recordTime) {
ElMessageBox.confirm(
'是否将记录时间同步为入院时间?',
'时间同步提示',
{
confirmButtonText: '同步',
cancelButtonText: '手动设置',
type: 'info'
}
).then(() => {
formData.recordTime = val;
}).catch(() => {});
}
});
=======
watch(
() => formData.admissionTime,
(val) => {
@@ -976,7 +562,6 @@ watch(
}
}
);
>>>>>>> v1.3
// 血压格式校验
const validateBloodPressure = () => {
@@ -998,11 +583,6 @@ const submit = () => {
validateBloodPressure();
if (!formData.bp) return; // 格式错误时终止提交
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
emits('submitOk', formData);
ElMessage.success('记录保存成功!');
}
@@ -1011,37 +591,6 @@ const submit = () => {
// 新增:重置表单方法(带确认提示)
const handleReset = () => {
<<<<<<< HEAD
ElMessageBox.confirm(
'确定要重置表单吗?所有已填写内容将被清空,且不可恢复',
'重置确认',
{
confirmButtonText: '确认重置',
cancelButtonText: '取消',
type: 'warning',
center: true
}
).then(() => {
// 执行表单重置
formRef.value.resetFields();
// 保留患者基础信息和默认值(避免清空关键基础数据)
formData.patientName = patient?.name || '';
formData.hospitalNo = patient?.busNo || '';
formData.gender = patient?.genderEnum_enumText || '';
formData.age = patient?.age || '';
formData.reliability = '可靠';
// 重置时间为当前时间
const today = new Date();
formData.admissionTime = formatDateTime(today);
formData.recordTime = formatDateTime(today);
formData.signDate = formatDateTime(today);
// 重置成功提示
ElMessage.success('表单已成功重置');
}).catch(() => {
// 取消重置提示
ElMessage.info('已取消表单重置');
});
=======
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空,且不可恢复', '重置确认', {
confirmButtonText: '确认重置',
cancelButtonText: '取消',
@@ -1069,7 +618,6 @@ const handleReset = () => {
// 取消重置提示
ElMessage.info('已取消表单重置');
});
>>>>>>> v1.3
};
// 表单数据赋值
@@ -1089,10 +637,6 @@ const formatDateTime = (date) => {
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
// 暴露接口
defineExpose({ formData, submit, setFormData, handleReset });
=======
// 打印方法
const printFun = () => {
console.log('入院记录打印');
@@ -1108,7 +652,6 @@ const printFun = () => {
// 暴露接口
defineExpose({ formData, submit, setFormData, handleReset, printFun });
>>>>>>> v1.3
</script>
<style scoped>
@@ -1116,12 +659,7 @@ defineExpose({ formData, submit, setFormData, handleReset, printFun });
.medical-form {
max-width: 1200px;
width: 100%;
<<<<<<< HEAD
height: 700px;
margin: 15px auto;
=======
height: 28000px;
>>>>>>> v1.3
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
@@ -1257,12 +795,8 @@ defineExpose({ formData, submit, setFormData, handleReset, printFun });
.adaptive-grid {
grid-template-columns: 1fr; /* 小屏幕下单列显示 */
}
<<<<<<< HEAD
.grid-item, .history-item {
=======
.grid-item,
.history-item {
>>>>>>> v1.3
margin-bottom: 10px;
}
/* 小屏幕按钮居中 */
@@ -1277,8 +811,4 @@ defineExpose({ formData, submit, setFormData, handleReset, printFun });
grid-template-columns: repeat(2, 1fr); /* 中等屏幕下两列显示 */
}
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -14,11 +14,7 @@
label-width="120px"
label-align="left"
class="doc-content"
<<<<<<< HEAD
style="height: 60vh; overflow: scroll;"
=======
style="height: 60vh; overflow: scroll"
>>>>>>> v1.3
>
<!-- 患者与手术基础信息 -->
<section class="doc-section">
@@ -27,35 +23,12 @@
<el-form-item label="患者姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
<el-input v-model.number="formData.age" type="number" placeholder="请输入年龄" />
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="科室" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:普外科" clearable />
</el-form-item>
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如502-03" clearable />
</el-form-item>
=======
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
@@ -72,7 +45,6 @@
<el-input v-model="formData.bedNo" placeholder="如502-03" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="手术日期/时间" prop="operationDateTime" class="grid-item required">
<el-date-picker
v-model="formData.operationDateTime"
@@ -91,25 +63,6 @@
<el-form-item label="手术者" prop="surgeon" class="grid-item required">
<el-input v-model="formData.surgeon" placeholder="主刀医师姓名" clearable />
</el-form-item>
<<<<<<< HEAD
<el-form-item label="第一助手" prop="firstAssistant" class="grid-item required">
<el-input v-model="formData.firstAssistant" placeholder="第一助手姓名" clearable />
</el-form-item>
<el-form-item label="第二助手" prop="secondAssistant" class="grid-item">
<el-input v-model="formData.secondAssistant" placeholder="第二助手姓名" clearable />
</el-form-item>
<el-form-item label="麻醉医师" prop="anesthesiologist" class="grid-item required">
<el-input v-model="formData.anesthesiologist" placeholder="麻醉医师姓名" clearable />
</el-form-item>
<el-form-item label="巡回护士" prop="circulatingNurse" class="grid-item required">
<el-input v-model="formData.circulatingNurse" placeholder="巡回护士姓名" clearable />
</el-form-item>
=======
<el-form-item label="第一助手" prop="firstAssistant" class="grid-item required">
<el-input v-model="formData.firstAssistant" placeholder="第一助手姓名" clearable />
@@ -127,7 +80,6 @@
<el-input v-model="formData.circulatingNurse" placeholder="巡回护士姓名" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="器械护士" prop="scrubNurse" class="grid-item required">
<el-input v-model="formData.scrubNurse" placeholder="器械护士姓名" clearable />
</el-form-item>
@@ -137,13 +89,6 @@
<!-- 手术详情 -->
<section class="doc-section">
<h2 class="section-title">手术详情</h2>
<<<<<<< HEAD
<el-form-item label="手术名称" prop="operationName" class="full-width-item required">
<el-input v-model="formData.operationName" placeholder="规范手术名称(如:腹腔镜下胆囊切除术)" clearable />
</el-form-item>
=======
<el-form-item label="手术名称" prop="operationName" class="full-width-item required">
<el-input
@@ -153,7 +98,6 @@
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="手术方式" prop="operationMethod" class="full-width-item required">
<el-select v-model="formData.operationMethod" placeholder="选择手术方式">
<el-option label="开放手术" value="开放手术" />
@@ -161,14 +105,6 @@
<el-option label="介入手术" value="介入手术" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="手术入路" prop="surgicalApproach" class="full-width-item required">
<el-input v-model="formData.surgicalApproach" placeholder="如:右上腹经腹直肌切口" clearable />
</el-form-item>
<el-form-item label="术中发现" prop="intraoperativeFindings" class="full-width-item required">
=======
<el-form-item label="手术入路" prop="surgicalApproach" class="full-width-item required">
<el-input
@@ -183,7 +119,6 @@
prop="intraoperativeFindings"
class="full-width-item required"
>
>>>>>>> v1.3
<el-input
v-model="formData.intraoperativeFindings"
type="textarea"
@@ -193,11 +128,6 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="手术过程" prop="operationProcess" class="full-width-item required">
<el-input
v-model="formData.operationProcess"
@@ -216,13 +146,6 @@
<div class="adaptive-grid">
<el-form-item label="术中出血量" prop="bloodLoss" class="grid-item required">
<div class="input-with-unit">
<<<<<<< HEAD
<el-input v-model.number="formData.bloodLoss" type="number" placeholder="请输入出血量" />
<span class="unit">ml</span>
</div>
</el-form-item>
=======
<el-input
v-model.number="formData.bloodLoss"
type="number"
@@ -232,24 +155,12 @@
</div>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="输血情况" prop="bloodTransfusion" class="grid-item">
<el-select v-model="formData.bloodTransfusion" placeholder="是否输血">
<el-option label="是" value="是" />
<el-option label="否" value="否" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="引流管放置" prop="drainageTube" class="grid-item">
<el-input v-model="formData.drainageTube" placeholder="如腹腔引流管1根" clearable />
</el-form-item>
<el-form-item label="标本处理" prop="specimenDisposal" class="grid-item required">
<el-input v-model="formData.specimenDisposal" placeholder="如:胆囊标本送病理检查" clearable />
</el-form-item>
=======
<el-form-item label="引流管放置" prop="drainageTube" class="grid-item">
<el-input v-model="formData.drainageTube" placeholder="如腹腔引流管1根" clearable />
@@ -263,7 +174,6 @@
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="手术结束时间" prop="operationEndTime" class="grid-item required">
<el-date-picker
v-model="formData.operationEndTime"
@@ -272,11 +182,6 @@
value-format="YYYY-MM-DD HH:mm"
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="患者去向" prop="patientDestination" class="grid-item required">
<el-select v-model="formData.patientDestination" placeholder="选择去向">
<el-option label="ICU" value="ICU" />
@@ -289,43 +194,25 @@
<!-- 签署区域 -->
<section class="doc-section">
<h2 class="section-title">签署确认</h2>
<<<<<<< HEAD
<div class="adaptive-grid signature-area" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));">
=======
<div
class="adaptive-grid signature-area"
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
>
>>>>>>> v1.3
<el-form-item label="手术者签名" prop="surgeonSignature" class="grid-item required">
<el-input v-model="formData.surgeonSignature" placeholder="主刀医师签字" clearable />
<div class="signature-tip">请手术者亲笔签名</div>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="记录者签名" prop="recorderSignature" class="grid-item required">
<el-input v-model="formData.recorderSignature" placeholder="记录者签字" clearable />
<div class="signature-tip">请记录者如第一助手签字</div>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="记录日期" prop="recordDate" class="grid-item required">
<el-date-picker
v-model="formData.recordDate"
type="date"
placeholder="选择记录日期"
value-format="YYYY-MM-DD"
<<<<<<< HEAD
style="width: 100%;"
=======
style="width: 100%"
>>>>>>> v1.3
/>
</el-form-item>
</div>
@@ -339,22 +226,11 @@
<el-button type="warning" @click="handleReset">重置表单</el-button>
</div>
</div>
<<<<<<< HEAD
=======
<intOperRecordSheet v-if="isShowprintDom" ref="recordPrintRef"></intOperRecordSheet>
>>>>>>> v1.3
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue';
<<<<<<< HEAD
import { ElMessage, ElMessageBox, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElDatePicker, ElButton } from 'element-plus';
// 医院名称
const hospitalName = '长春市朝阳区中医院';
defineOptions({
name: 'iInHospitalSurgicalRecord'
=======
import intOperRecordSheet from '../views/hospitalRecord/components/intOperRecordSheet.vue';
import {
ElMessage,
@@ -374,7 +250,6 @@ const recordPrintRef = ref();
const hospitalName = '长春市朝阳区中医院';
defineOptions({
name: 'iInHospitalSurgicalRecord',
>>>>>>> v1.3
});
// 表单引用
const formRef = ref(null);
@@ -388,115 +263,6 @@ const formData = reactive({
age: '',
department: '',
bedNo: '',
<<<<<<< HEAD
operationDateTime: '',// 手术日期时间
// 手术团队信息
surgeon: '',// 主刀医师
firstAssistant: '',// 第一助手
secondAssistant: '',// 第二助手
anesthesiologist: '',// 麻醉医师
circulatingNurse: '',// 巡回护士
scrubNurse: '',// 器械护士
// 手术详情
operationName: '',// 规范手术名称
operationMethod: '',// 手术方式
surgicalApproach: '',// 手术入路
intraoperativeFindings: '',// 术中发现
operationProcess: '',// 手术过程
// 术后情况
bloodLoss: '',// 术中出血量
bloodTransfusion: '',// 输血情况
drainageTube: '',// 引流管放置
specimenDisposal: '',// 标本处理
operationEndTime: '',// 手术结束时间
patientDestination: '',// 患者去向
// 签署信息
surgeonSignature: '',// 手术者签名
recorderSignature: '',// 记录者签名
recordDate: ''// 记录日期
});
// 表单验证规则
const rules = reactive({
busNo: [
{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }
],
patientName: [
{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }
],
gender: [
{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }
],
age: [
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] }
],
department: [
{ required: true, message: '请填写科室', trigger: ['blur', 'submit'] }
],
bedNo: [
{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }
],
operationDateTime: [
{ required: true, message: '请选择手术日期时间', trigger: ['change', 'submit'] }
],
surgeon: [
{ required: true, message: '请填写手术者姓名', trigger: ['blur', 'submit'] }
],
firstAssistant: [
{ required: true, message: '请填写第一助手姓名', trigger: ['blur', 'submit'] }
],
anesthesiologist: [
{ required: true, message: '请填写麻醉医师姓名', trigger: ['blur', 'submit'] }
],
circulatingNurse: [
{ required: true, message: '请填写巡回护士姓名', trigger: ['blur', 'submit'] }
],
scrubNurse: [
{ required: true, message: '请填写器械护士姓名', trigger: ['blur', 'submit'] }
],
operationName: [
{ required: true, message: '请填写手术名称', trigger: ['blur', 'submit'] }
],
operationMethod: [
{ required: true, message: '请选择手术方式', trigger: ['change', 'submit'] }
],
surgicalApproach: [
{ required: true, message: '请填写手术入路', trigger: ['blur', 'submit'] }
],
intraoperativeFindings: [
{ required: true, message: '请描述术中发现', trigger: ['blur', 'submit'] }
],
operationProcess: [
{ required: true, message: '请描述手术过程', trigger: ['blur', 'submit'] }
],
bloodLoss: [
{ required: true, message: '请填写术中出血量', trigger: ['blur', 'submit'] },
{ type: 'number', min: 0, message: '出血量不能为负数', trigger: ['blur', 'submit'] }
],
specimenDisposal: [
{ required: true, message: '请填写标本处理方式', trigger: ['blur', 'submit'] }
],
operationEndTime: [
{ required: true, message: '请选择手术结束时间', trigger: ['change', 'submit'] }
],
patientDestination: [
{ required: true, message: '请选择患者去向', trigger: ['change', 'submit'] }
],
surgeonSignature: [
{ required: true, message: '请手术者签名', trigger: ['blur', 'submit'] }
],
recorderSignature: [
{ required: true, message: '请记录者签名', trigger: ['blur', 'submit'] }
],
recordDate: [
{ required: true, message: '请选择记录日期', trigger: ['change', 'submit'] }
]
=======
operationDateTime: '', // 手术日期时间
// 手术团队信息
@@ -584,7 +350,6 @@ const rules = reactive({
surgeonSignature: [{ required: true, message: '请手术者签名', trigger: ['blur', 'submit'] }],
recorderSignature: [{ required: true, message: '请记录者签名', trigger: ['blur', 'submit'] }],
recordDate: [{ required: true, message: '请选择记录日期', trigger: ['change', 'submit'] }],
>>>>>>> v1.3
});
// 生命周期
@@ -594,10 +359,6 @@ onMounted(() => {
formData.operationDateTime = formatDateTime(today);
formData.operationEndTime = formatDateTime(today);
formData.recordDate = formatDate(today);
<<<<<<< HEAD
});
=======
if (!formData.patientName) {
formData.patientName = patient?.patientName || '';
}
@@ -620,23 +381,17 @@ onMounted(() => {
const emits = defineEmits(['submitOk']);
>>>>>>> v1.3
// 提交表单
const submit = () => {
formRef.value.validate((valid) => {
if (valid) {
ElMessage.success('手术记录保存成功');
console.log('手术记录数据:', formData);
<<<<<<< HEAD
=======
emits('submitOk', formData);
>>>>>>> v1.3
}
});
};
<<<<<<< HEAD
=======
// 表单数据赋值
const setFormData = (data) => {
if (data) {
@@ -647,7 +402,6 @@ const setFormData = (data) => {
}
};
>>>>>>> v1.3
// 打印功能
const handlePrint = () => {
formRef.value.validate((valid) => {
@@ -661,23 +415,11 @@ const handlePrint = () => {
// 重置表单
const handleReset = () => {
<<<<<<< HEAD
ElMessageBox.confirm(
'确定要重置表单吗?所有已填写内容将被清空',
'确认重置',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
=======
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空', '确认重置', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
>>>>>>> v1.3
formRef.value.resetFields();
const today = new Date();
formData.operationDateTime = formatDateTime(today);
@@ -703,14 +445,6 @@ const formatDateTime = (date) => {
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
</script>
<style scoped>
/* 样式与原代码保持一致,无需修改 */
.medical-document {
max-width: 1200px;
=======
const printFun = () => {
console.log('入院记录打印');
isShowprintDom.value = true;
@@ -730,16 +464,12 @@ defineExpose({ submit, setFormData, printFun });
.medical-document {
max-width: 1440px; /* PC端最优宽度兼顾大屏和常规屏 */
width: 98%; /* 占满父容器98%,保留少量边距 */
>>>>>>> v1.3
margin: 20px auto;
padding: 30px;
background: #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
font-family: 'SimSun', '宋体', serif;
<<<<<<< HEAD
=======
box-sizing: border-box; /* 确保内边距不撑大容器 */
>>>>>>> v1.3
}
.doc-header {
@@ -778,13 +508,6 @@ defineExpose({ submit, setFormData, printFun });
font-weight: bold;
}
<<<<<<< HEAD
.adaptive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 15px 20px;
margin-bottom: 15px;
=======
/* 自适应网格PC端优先展示多列优化列宽比例 */
.adaptive-grid {
display: grid;
@@ -793,7 +516,6 @@ defineExpose({ submit, setFormData, printFun });
gap: 15px 20px;
margin-bottom: 15px;
width: 100%;
>>>>>>> v1.3
}
.grid-item {
@@ -847,21 +569,6 @@ defineExpose({ submit, setFormData, printFun });
margin-right: 4px;
}
<<<<<<< HEAD
@media (max-width: 768px) {
.medical-document {
padding: 15px;
}
.adaptive-grid {
grid-template-columns: 1fr;
}
.doc-title {
font-size: 18px;
}
=======
/* 仅针对小屏设备做基础适配优先保证PC端体验 */
@media (max-width: 768px) {
.medical-document {
@@ -877,14 +584,11 @@ defineExpose({ submit, setFormData, printFun });
font-size: 18px;
}
>>>>>>> v1.3
.section-title {
font-size: 16px;
}
}
<<<<<<< HEAD
=======
/* 超宽屏≥1920px优化适度增大间距提升视觉体验 */
@media (min-width: 1920px) {
.medical-document {
@@ -897,47 +601,26 @@ defineExpose({ submit, setFormData, printFun });
}
/* 打印样式保留 */
>>>>>>> v1.3
@media print {
.btn-group {
display: none;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.medical-document {
box-shadow: none;
margin: 0;
padding: 0;
<<<<<<< HEAD
}
.el-input__inner, .el-select__input, .el-textarea__inner {
=======
max-width: 100%;
}
.el-input__inner,
.el-select__input,
.el-textarea__inner {
>>>>>>> v1.3
border: none !important;
box-shadow: none !important;
background: transparent !important;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.el-form-item__label {
font-weight: bold !important;
}
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -22,35 +22,12 @@
<el-form-item label="姓名" prop="patientName" class="grid-item required">
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="性别" prop="gender" class="grid-item required">
<el-select v-model="formData.gender" placeholder="请选择性别">
<el-option label="男" value="男" />
<el-option label="女" value="女" />
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
<el-input v-model.number="formData.age" type="number" placeholder="请输入年龄" />
<span class="unit"></span>
</div>
</el-form-item>
<el-form-item label="科室/病区" prop="department" class="grid-item required">
<el-input v-model="formData.department" placeholder="如:内科疗区" clearable />
</el-form-item>
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
<el-input v-model="formData.bedNo" placeholder="如307-12" clearable />
</el-form-item>
=======
<el-form-item label="年龄" prop="age" class="grid-item required">
<div class="input-with-unit">
@@ -67,7 +44,6 @@
<el-input v-model="formData.bedNo" placeholder="如307-12" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="入院日期" prop="admissionDate" class="grid-item required">
<el-date-picker
v-model="formData.admissionDate"
@@ -86,19 +62,11 @@
<el-form-item label="经治医师" prop="treatingDoctor" class="grid-item required">
<el-input v-model="formData.treatingDoctor" placeholder="请输入医师姓名" clearable />
</el-form-item>
<<<<<<< HEAD
<el-form-item label="主治医师" prop="attendingDoctor" class="grid-item required">
<el-input v-model="formData.attendingDoctor" placeholder="请输入医师姓名" clearable />
</el-form-item>
=======
<el-form-item label="主治医师" prop="attendingDoctor" class="grid-item required">
<el-input v-model="formData.attendingDoctor" placeholder="请输入医师姓名" clearable />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="科主任" prop="departmentHead" class="grid-item required">
<el-input v-model="formData.departmentHead" placeholder="请输入主任姓名" clearable />
</el-form-item>
@@ -108,11 +76,6 @@
<!-- 病情与诊断 -->
<section class="doc-section">
<h2 class="section-title">病情与诊断</h2>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="病情状况" prop="condition" class="full-width-item required">
<el-input
v-model="formData.condition"
@@ -123,11 +86,6 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<div class="diagnosis-container">
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="diagnosis-item">
<el-input
@@ -139,11 +97,6 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="西医诊断" prop="westernDiagnosis" class="diagnosis-item">
<el-input
v-model="formData.westernDiagnosis"
@@ -160,11 +113,6 @@
<!-- 治疗与检查计划 -->
<section class="doc-section">
<h2 class="section-title">治疗与检查计划</h2>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="治疗方案" prop="treatmentPlan" class="full-width-item required">
<el-input
v-model="formData.treatmentPlan"
@@ -175,17 +123,12 @@
show-word-limit
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="进一步检查项目" prop="examinationItems" class="full-width-item required">
=======
<el-form-item
label="进一步检查项目"
prop="examinationItems"
class="full-width-item required"
>
>>>>>>> v1.3
<el-input
v-model="formData.examinationItems"
type="textarea"
@@ -215,25 +158,14 @@
<!-- 签署区域优化后三列自适应+细节样式 -->
<section class="doc-section">
<h2 class="section-title">签署确认</h2>
<<<<<<< HEAD
<div class="adaptive-grid signature-area" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));">
=======
<div
class="adaptive-grid signature-area"
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
>
>>>>>>> v1.3
<el-form-item label="患者或家属签字" prop="patientSignature" class="grid-item required">
<el-input v-model="formData.patientSignature" placeholder="请签字" clearable />
<div class="signature-tip">请填写患者或家属签字</div>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="与患者关系" prop="relationship" class="grid-item">
<el-input v-model="formData.relationship" placeholder="如:本人、配偶、子女" clearable />
</el-form-item>
=======
<el-form-item label="与患者关系" prop="relationship" class="grid-item">
<el-input
@@ -243,44 +175,27 @@
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="签字日期" prop="signatureDate" class="grid-item required">
<el-date-picker
v-model="formData.signatureDate"
type="date"
placeholder="选择签字日期"
value-format="YYYY-MM-DD"
<<<<<<< HEAD
style="width: 100%;"
/>
</el-form-item>
=======
style="width: 100%"
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item label="沟通医师签字" prop="doctorSignature" class="grid-item required">
<el-input v-model="formData.doctorSignature" placeholder="请签字" clearable />
<div class="signature-tip">请填写沟通医师签字</div>
</el-form-item>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-form-item label="沟通日期" prop="communicationDate" class="grid-item required">
<el-date-picker
v-model="formData.communicationDate"
type="datetime"
placeholder="选择沟通日期时间"
value-format="YYYY-MM-DD HH:mm"
<<<<<<< HEAD
style="width: 100%;"
=======
style="width: 100%"
>>>>>>> v1.3
/>
</el-form-item>
</div>
@@ -298,9 +213,6 @@
<script setup>
import { ref, reactive, onMounted } from 'vue';
<<<<<<< HEAD
import { ElMessage, ElMessageBox, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElDatePicker, ElButton } from 'element-plus';
=======
import {
ElMessage,
ElMessageBox,
@@ -312,15 +224,10 @@ import {
ElDatePicker,
ElButton,
} from 'element-plus';
>>>>>>> v1.3
// 医院名称
const hospitalName = '长春市朝阳区中医院';
defineOptions({
<<<<<<< HEAD
name: 'InHospitalCommunicate'
});
=======
name: 'InHospitalCommunicate',
});
// Props与事件
@@ -353,7 +260,6 @@ onMounted(() => {
});
const patient = props.patientInfo;
console.log('patient1111=======>', JSON.stringify(patient));
>>>>>>> v1.3
// 表单引用
const formRef = ref(null);
@@ -367,34 +273,14 @@ const formData = reactive({
department: '',
bedNo: '',
admissionDate: '',
<<<<<<< HEAD
=======
>>>>>>> v1.3
// 医疗团队
treatingDoctor: '',
attendingDoctor: '',
departmentHead: '',
<<<<<<< HEAD
=======
>>>>>>> v1.3
// 病情诊断
condition: '',
tcmDiagnosis: '',
westernDiagnosis: '',
<<<<<<< HEAD
// 治疗检查
treatmentPlan: '',
examinationItems: '',
// 风险告知
riskNotification: '',
=======
// 治疗检查
treatmentPlan: '',
@@ -403,78 +289,16 @@ const formData = reactive({
// 风险告知
riskNotification: '',
>>>>>>> v1.3
// 签署信息
patientSignature: '',
relationship: '',
signatureDate: '',
doctorSignature: '',
<<<<<<< HEAD
communicationDate: ''
=======
communicationDate: '',
>>>>>>> v1.3
});
// 表单验证规则
const rules = reactive({
<<<<<<< HEAD
hospitalNo: [
{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }
],
patientName: [
{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }
],
gender: [
{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }
],
age: [
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] }
],
department: [
{ required: true, message: '请填写科室/病区', trigger: ['blur', 'submit'] }
],
bedNo: [
{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }
],
admissionDate: [
{ required: true, message: '请选择入院日期', trigger: ['change', 'submit'] }
],
treatingDoctor: [
{ required: true, message: '请填写经治医师', trigger: ['blur', 'submit'] }
],
attendingDoctor: [
{ required: true, message: '请填写主治医师', trigger: ['blur', 'submit'] }
],
departmentHead: [
{ required: true, message: '请填写科主任', trigger: ['blur', 'submit'] }
],
condition: [
{ required: true, message: '请描述病情状况', trigger: ['blur', 'submit'] }
],
treatmentPlan: [
{ required: true, message: '请填写治疗方案', trigger: ['blur', 'submit'] }
],
examinationItems: [
{ required: true, message: '请填写检查项目', trigger: ['blur', 'submit'] }
],
riskNotification: [
{ required: true, message: '请填写风险告知内容', trigger: ['blur', 'submit'] }
],
patientSignature: [
{ required: true, message: '请填写患者或家属签字', trigger: ['blur', 'submit'] }
],
signatureDate: [
{ required: true, message: '请选择签字日期', trigger: ['change', 'submit'] }
],
doctorSignature: [
{ required: true, message: '请填写医师签字', trigger: ['blur', 'submit'] }
],
communicationDate: [
{ required: true, message: '请选择沟通日期', trigger: ['change', 'submit'] }
]
=======
hospitalNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
patientName: [{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }],
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
@@ -500,7 +324,6 @@ const rules = reactive({
signatureDate: [{ required: true, message: '请选择签字日期', trigger: ['change', 'submit'] }],
doctorSignature: [{ required: true, message: '请填写医师签字', trigger: ['blur', 'submit'] }],
communicationDate: [{ required: true, message: '请选择沟通日期', trigger: ['change', 'submit'] }],
>>>>>>> v1.3
});
// 生命周期
@@ -512,27 +335,19 @@ onMounted(() => {
formData.communicationDate = formatDateTime(today);
});
<<<<<<< HEAD
=======
const emits = defineEmits(['submitOk']);
>>>>>>> v1.3
// 提交表单
const submit = () => {
formRef.value.validate((valid) => {
if (valid) {
ElMessage.success('记录保存成功');
console.log('表单数据:', formData);
<<<<<<< HEAD
=======
emits('submitOk', formData);
>>>>>>> v1.3
}
});
};
<<<<<<< HEAD
=======
// 表单数据赋值
const setFormData = (data) => {
if (data) {
@@ -540,7 +355,6 @@ const setFormData = (data) => {
}
};
>>>>>>> v1.3
// 打印功能
const handlePrint = () => {
formRef.value.validate((valid) => {
@@ -554,23 +368,11 @@ const handlePrint = () => {
// 重置表单
const handleReset = () => {
<<<<<<< HEAD
ElMessageBox.confirm(
'确定要重置表单吗?所有已填写内容将被清空',
'确认重置',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
=======
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空', '确认重置', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
>>>>>>> v1.3
formRef.value.resetFields();
const today = new Date();
formData.admissionDate = formatDate(today);
@@ -596,11 +398,8 @@ const formatDateTime = (date) => {
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
=======
defineExpose({ submit, setFormData });
>>>>>>> v1.3
</script>
<style scoped>
@@ -732,21 +531,6 @@ defineExpose({ submit, setFormData });
.medical-document {
padding: 15px;
}
<<<<<<< HEAD
.diagnosis-container {
grid-template-columns: 1fr;
}
.adaptive-grid {
grid-template-columns: 1fr;
}
.doc-title {
font-size: 18px;
}
=======
.diagnosis-container {
grid-template-columns: 1fr;
@@ -760,7 +544,6 @@ defineExpose({ submit, setFormData });
font-size: 18px;
}
>>>>>>> v1.3
.section-title {
font-size: 16px;
}
@@ -771,40 +554,21 @@ defineExpose({ submit, setFormData });
.btn-group {
display: none;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.medical-document {
box-shadow: none;
margin: 0;
padding: 0;
}
<<<<<<< HEAD
.el-input__inner, .el-select__input, .el-textarea__inner {
=======
.el-input__inner,
.el-select__input,
.el-textarea__inner {
>>>>>>> v1.3
border: none !important;
box-shadow: none !important;
background: transparent !important;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.el-form-item__label {
font-weight: bold !important;
}
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -1,29 +1,15 @@
<template>
<<<<<<< HEAD
<!-- 门诊病历表单主容器 -->
<div class="medical-form">
<!-- 患者基本信息展示区域 -->
=======
<div class="medical-form">
>>>>>>> v1.3
<div class="patient-name">
患者姓名{{ patient?.patientName || '未知' }} &nbsp;&nbsp; 病历号{{
patient?.busNo || '未知'
}}
</div>
<<<<<<< HEAD
<!-- 医院名称和标题 -->
=======
>>>>>>> v1.3
<h2 style="text-align: center">{{ userStore.hospitalName }}</h2>
<h2 style="text-align: center">门诊病历</h2>
<!-- 滚动内容区域 -->
<div class="form-scroll-container">
<<<<<<< HEAD
<!-- Element Plus表单组件 -->
=======
>>>>>>> v1.3
<el-form
ref="formRef"
:model="formData"
@@ -32,58 +18,34 @@
label-align="left"
class="medical-full-form"
>
<<<<<<< HEAD
<!-- 基础信息区域标题 -->
=======
>>>>>>> v1.3
<h4 class="section-title">基础信息</h4>
<!-- 1. 基础信息单行自适应排列 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<<<<<<< HEAD
<!-- 身高输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="身高" prop="height" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.height" type="text" placeholder="请输入" />
<span class="unit">cm</span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 体重输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="体重" prop="weight" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.weight" type="text" placeholder="请输入" />
<span class="unit">kg</span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 体温输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="体温" prop="temperature" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
<span class="unit"></span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 脉搏输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="脉搏" prop="pulse" class="row-item">
<div class="input-with-unit">
<el-input v-model="formData.pulse" type="text" placeholder="请输入" />
<span class="unit">/</span>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 发病日期选择项 -->
=======
>>>>>>> v1.3
<el-form-item label="发病日期" prop="onsetDate" class="row-item">
<el-date-picker
v-model="formData.onsetDate"
@@ -96,19 +58,10 @@
</el-form-item>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 病史信息区域标题 -->
=======
>>>>>>> v1.3
<h4 class="section-title">病史信息</h4>
<!-- 2. 病史信息单行自适应排列新增调整 -->
<el-form-item class="form-section">
<div class="single-row-layout">
<<<<<<< HEAD
<!-- 现病史输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="现病史" prop="presentIllness" class="row-item history-item">
<el-input
v-model="formData.presentIllness"
@@ -117,17 +70,9 @@
autosize
/>
</el-form-item>
<<<<<<< HEAD
<!-- 既往史输入项 -->
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
</el-form-item>
<!-- 个人史输入项 -->
=======
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
</el-form-item>
>>>>>>> v1.3
<el-form-item label="个人史" prop="personalHistory" class="row-item history-item">
<el-input
v-model="formData.personalHistory"
@@ -136,10 +81,6 @@
autosize
/>
</el-form-item>
<<<<<<< HEAD
<!-- 过敏史输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="过敏史" prop="allergyHistory" class="row-item history-item">
<el-input
v-model="formData.allergyHistory"
@@ -148,10 +89,6 @@
autosize
/>
</el-form-item>
<<<<<<< HEAD
<!-- 家族史输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="家族史" prop="familyHistory" class="row-item history-item">
<el-input
v-model="formData.familyHistory"
@@ -162,11 +99,6 @@
</el-form-item>
</div>
</el-form-item>
<<<<<<< HEAD
<!-- 主诉查体(治疗)处置辅助检查区域标题 -->
=======
>>>>>>> v1.3
<h4 class="section-title">主诉查体(治疗)处置辅助检查</h4>
<!-- 3. 主诉必填 -->
<el-form-item label="主诉" prop="complaint" class="required form-item-single">
@@ -179,10 +111,6 @@
/>
</el-form-item>
<!-- 4. 查体处理辅助检查 -->
<<<<<<< HEAD
<!-- 查体(治疗)输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="查体(治疗)" prop="physicalExam" class="form-item-single">
<el-input
v-model="formData.physicalExam"
@@ -193,10 +121,6 @@
/>
</el-form-item>
<<<<<<< HEAD
<!-- 处置输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="处置" prop="treatment" class="form-item-single">
<el-input
v-model="formData.treatment"
@@ -207,10 +131,6 @@
/>
</el-form-item>
<<<<<<< HEAD
<!-- 辅助检查输入项 -->
=======
>>>>>>> v1.3
<el-form-item label="辅助检查" prop="auxiliaryExam" class="form-item-single">
<el-input
v-model="formData.auxiliaryExam"
@@ -226,62 +146,24 @@
</template>
<script setup>
<<<<<<< HEAD
// 导入Vue相关功能和组件
=======
>>>>>>> v1.3
import { reactive, ref, onBeforeMount, onMounted, watch } from 'vue';
import useUserStore from '../store/modules/user';
import { ElInput, ElMessage, ElForm, ElFormItem } from 'element-plus';
import { patientInfo } from '../views/doctorstation/components/store/patient';
import { pa } from 'element-plus/es/locales.mjs';
<<<<<<< HEAD
// 定义组件选项
=======
>>>>>>> v1.3
defineOptions({
name: 'OutpatientMedicalRecord',
components: { ElInput, ElMessage, ElForm, ElFormItem },
});
<<<<<<< HEAD
// // Props与事件,去掉props.patientInfo改为直接从store获取
=======
// // Props与事件, 去掉props.patientInfo改为直接从store获取
>>>>>>> v1.3
// const props = defineProps({
// patientInfo: {
// type: Object,
// required: true,
// },
// });
<<<<<<< HEAD
// 定义组件接收的属性(目前为空)
const props = defineProps({});
// 定义组件触发的事件
const emits = defineEmits(['submitOk']);
// 数据初始化
// 获取用户store实例用于获取医院名称等全局信息
const userStore = useUserStore();
// 患者信息引用,存储当前就诊患者的基本信息
const patient = ref(null);
// 表单引用,用于访问表单实例进行验证等操作
const formRef = ref(null);
// 表单数据(全部字符类型)
// 存储门诊病历表单的所有字段数据
const formData = reactive({
height: '', // 身高(cm)
weight: '', // 体重(kg)
temperature: '', // 体温(℃)
pulse: '', // 脉搏(次/分)
onsetDate: '', // 发病日期
complaint: '', // 主诉(必填项)
=======
const props = defineProps({});
const emits = defineEmits(['submitOk']);
@@ -298,28 +180,17 @@ const formData = reactive({
pulse: '', // 脉搏
onsetDate: '', // 发病日期
complaint: '', // 主诉(必填)
>>>>>>> v1.3
presentIllness: '', // 现病史
pastIllness: '', // 既往史
personalHistory: '', // 个人史
allergyHistory: '', // 过敏史
<<<<<<< HEAD
physicalExam: '', // 查体结果
treatment: '', // 处理方案
auxiliaryExam: '', // 辅助检查结果
=======
physicalExam: '', // 查体
treatment: '', // 处理
auxiliaryExam: '', // 辅助检查
>>>>>>> v1.3
familyHistory: '', // 家族史
});
// 表单校验规则
<<<<<<< HEAD
// 定义表单字段的验证规则,目前仅主诉为必填项
=======
>>>>>>> v1.3
const rules = reactive({
complaint: [
{
@@ -331,23 +202,6 @@ const rules = reactive({
});
// 提交函数
<<<<<<< HEAD
// 用于触发表单验证并提交数据到父组件
const submit = () => {
// 表单验证
formRef.value.validate((isValid) => {
if (isValid) {
// 触发submitOk事件传递表单数据
emits('submitOk', formData);
// 显示成功消息
ElMessage.success('提交成功');
}
});
};
// 日期格式化工具函数
// 将Date对象格式化为 YYYY-MM-DD HH:mm 格式的字符串
=======
const submit = () => {
formRef.value.validate((isValid) => {
if (isValid) {
@@ -356,7 +210,6 @@ const submit = () => {
});
};
// 日期格式化工具
>>>>>>> v1.3
const formatDateTime = (date) => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
@@ -365,36 +218,17 @@ const formatDateTime = (date) => {
const minute = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}`;
};
<<<<<<< HEAD
// 表单数据赋值函数
// 用于外部组件向表单填充已有数据
const setFormData = (data) => {
if (data) {
// 将传入的数据合并到表单数据中
=======
// 表单数据赋值
const setFormData = (data) => {
if (data) {
>>>>>>> v1.3
Object.assign(formData, data);
}
};
<<<<<<< HEAD
// 生命周期钩子 - 组件挂载前
onBeforeMount(() => {});
// 生命周期钩子 - 组件挂载后
onMounted(() => {
console.log('当前患者信息:', patientInfo);
// 从store获取患者信息
=======
// 生命周期
onBeforeMount(() => {});
onMounted(() => {
console.log('当前患者信息:', patientInfo);
>>>>>>> v1.3
patient.value = patientInfo.value;
// 初始化发病日期为当前时间
if (!formData.onsetDate) {
@@ -403,10 +237,6 @@ onMounted(() => {
});
// 监听患者信息变化,实现联动显示
<<<<<<< HEAD
// 当patientInfo发生变化时更新本地patient引用
=======
>>>>>>> v1.3
watch(
() => patientInfo.value,
(newPatientInfo) => {
@@ -415,12 +245,7 @@ watch(
{ deep: true }
);
<<<<<<< HEAD
// 暴露接口供父组件调用
// 将formData、submit方法和setFormData方法暴露给父组件使用
=======
// 暴露接口
>>>>>>> v1.3
defineExpose({ formData, submit, setFormData });
</script>
@@ -430,23 +255,15 @@ defineExpose({ formData, submit, setFormData });
max-width: 1200px;
width: 100%;
min-height: 800px;
<<<<<<< HEAD
height: 900px;
=======
height: auto;
>>>>>>> v1.3
margin: 15px auto;
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
font-family: Arial, sans-serif;
box-sizing: border-box;
<<<<<<< HEAD
overflow: visible;
=======
overflow: hidden; /* 防止内部内容溢出 */
position: relative;
>>>>>>> v1.3
}
/* 顶部姓名样式 */
@@ -461,19 +278,12 @@ defineExpose({ formData, submit, setFormData });
/* 滚动内容容器 */
.form-scroll-container {
width: 100%;
<<<<<<< HEAD
max-height: 80vh;
=======
max-height: 55vh;
>>>>>>> v1.3
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: thin;
scrollbar-color: #ccc #f5f5f5;
<<<<<<< HEAD
=======
position: relative;
>>>>>>> v1.3
}
.form-scroll-container::-webkit-scrollbar {
width: 6px;
@@ -489,11 +299,8 @@ defineExpose({ formData, submit, setFormData });
/* 完整表单容器 */
.medical-full-form {
width: 100%;
<<<<<<< HEAD
=======
min-width: 0; /* 防止内容强制拉伸容器 */
box-sizing: border-box;
>>>>>>> v1.3
}
/* 区域通用样式 */
@@ -515,11 +322,8 @@ defineExpose({ formData, submit, setFormData });
flex-wrap: wrap; /* 自动换行 */
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
gap: 15px; /* 统一元素间距 */
<<<<<<< HEAD
=======
width: 100%;
box-sizing: border-box;
>>>>>>> v1.3
}
.row-item {
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
@@ -590,17 +394,11 @@ defineExpose({ formData, submit, setFormData });
.medical-form {
height: 80vh;
padding: 10px;
<<<<<<< HEAD
}
.form-scroll-container {
height: calc(100% - 35px);
=======
overflow: hidden;
}
.form-scroll-container {
height: calc(100% - 35px);
max-height: none;
>>>>>>> v1.3
}
.el-form {
label-width: 70px !important;
@@ -619,8 +417,4 @@ defineExpose({ formData, submit, setFormData });
--el-input-textarea-min-height: 80px;
}
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -501,8 +501,6 @@ export function getGroupMarkers(tableData) {
}
});
return tableData;
<<<<<<< HEAD
=======
}
/**
@@ -532,5 +530,4 @@ export function formatInventory(quantity, partPercent, unitCode, minUnitCode) {
// 整除情况
const result = absQuantity / partPercent;
return isNegative ? '-' + result : result + ' ' + unitCode;
>>>>>>> v1.3
}

View File

@@ -3,11 +3,7 @@
* 集中管理所有打印相关功能
*/
<<<<<<< HEAD
// 打印模板映射表
=======
// 打印模板映射表 .
>>>>>>> v1.3
const TEMPLATE_MAP = {
// CLINIC_CHARGE: () => import('@/views/charge/cliniccharge/components/template.json'),
// DISPOSAL: () => import('@/views/clinicmanagement/disposal/components/disposalTemplate.json'),
@@ -25,8 +21,6 @@ const TEMPLATE_MAP = {
OUTPATIENT_REGISTRATION: () => import('@/components/Print/OutpatientRegistration.json'),
//门诊收费
OUTPATIENT_CHARGE: () => import('@/components/Print/OutpatientBilling.json'),
<<<<<<< HEAD
=======
//门诊病历
OUTPATIENT_MEDICAL_RECORD: () => import('@/components/Print/OutpatientMedicalRecord.json'),
//门诊输液贴
@@ -46,7 +40,6 @@ const TEMPLATE_MAP = {
//中药医生处方单
DOC_CHINESE_MEDICINE_PRESCRIPTION: () =>
import('@/components/Print/DocChineseMedicinePrescription.json'),
>>>>>>> v1.3
};
/**
@@ -134,8 +127,6 @@ export const PRINT_TEMPLATE = {
PRESCRIPTION: 'PRESCRIPTION',
//处置单
DISPOSAL: 'DISPOSAL',
<<<<<<< HEAD
=======
//门诊病历
OUTPATIENT_MEDICAL_RECORD: 'OUTPATIENT_MEDICAL_RECORD',
//门诊输液贴
@@ -152,7 +143,6 @@ export const PRINT_TEMPLATE = {
PHARMACY_PRESCRIPTION: 'PHARMACY_PRESCRIPTION',
//中药医生处方单
DOC_CHINESE_MEDICINE_PRESCRIPTION: 'DOC_CHINESE_MEDICINE_PRESCRIPTION',
>>>>>>> v1.3
};
/**
@@ -173,10 +163,7 @@ export function getPrinterList() {
}
import useUserStore from '@/store/modules/user';
<<<<<<< HEAD
=======
import { ElMessage } from 'element-plus';
>>>>>>> v1.3
/**
* 获取当前登录用户ID
@@ -329,8 +316,6 @@ export async function selectPrinterAndPrint(
}
}
<<<<<<< HEAD
=======
// 预览打印
export function previewPrint(elementDom) {
if (elementDom) {
@@ -347,7 +332,6 @@ export function previewPrint(elementDom) {
}
}
>>>>>>> v1.3
// 默认导出简化的打印方法
export default {
print: simplePrint,

View File

@@ -104,14 +104,6 @@
style="width: 200px"
:class="{ 'error-border': scope.row.error }"
>
<<<<<<< HEAD
<el-option
v-for="dict in med_category_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
=======
<template v-if="scope.row.itemCode == '1'">
<el-option
v-for="dict in med_category_code"
@@ -128,7 +120,6 @@
:value="dict.value"
/>
</template>
>>>>>>> v1.3
</el-select>
</div>
</template>
@@ -226,15 +217,11 @@ import {
deletePharmacyDepartment,
} from './components/pharmacyDepartment';
const { proxy } = getCurrentInstance();
<<<<<<< HEAD
const { med_category_code } = proxy.useDict('med_category_code');
=======
const { distribution_category_code, med_category_code, device_category_code } = proxy.useDict(
'distribution_category_code',
'med_category_code',
'device_category_code'
);
>>>>>>> v1.3
import { nextTick } from 'vue';
const diagnosisTreatmentList = ref([]);

View File

@@ -36,12 +36,8 @@ export function updateWarehouse(data) {
// 删除
export function deleteWarehouse(data) {
return request({
<<<<<<< HEAD
url: '/base-data-manage/location/location',
=======
// url: '/base-data-manage/location/location?locationId=' + data.locationId,
url: '/base-data-manage/location/location?busNo=' + data.busNo,
>>>>>>> v1.3
method: 'delete',
params: {
locationId: data.locationId,

View File

@@ -292,38 +292,12 @@ function submitForm() {
// 删除
function handelDelete(data) {
<<<<<<< HEAD
proxy.$modal.confirm('是否确认删除该仓库位置?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
loading.value = true;
deleteWarehouse({ locationId: data.id, busNo: data.busNo }).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('删除成功');
getPageList();
} else {
// 检查错误信息是否与药品数据关联有关
if (res.msg && res.msg.includes('药品')) {
proxy.$modal.msgError('该仓库名称已有药品信息请核对确认');
} else {
proxy.$modal.msgError('删除失败:' + (res.msg || '未知错误'));
}
}
}).catch(() => {
proxy.$modal.msgError('删除失败');
}).finally(() => {
loading.value = false;
});
=======
loading.value = true;
console.log(data, 'data');
deleteWarehouse({ busNo: data.busNo }).then((res) => {
proxy.$modal.msgSuccess('操作成功');
loading.value = false;
getPageList();
>>>>>>> v1.3
});
}
// // 停用

View File

@@ -757,11 +757,7 @@ const transformFormData = (form) => {
ybNo,
title,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
} = form.value;
return {
@@ -779,11 +775,7 @@ const transformFormData = (form) => {
appointmentRequiredFlag,
extraDetails,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
},
chargeItemDefinitionFormData: {
id,
@@ -822,11 +814,7 @@ const transformFormEditData = (form) => {
ybNo,
title,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
} = form.value;
return {
@@ -844,11 +832,7 @@ const transformFormEditData = (form) => {
appointmentRequiredFlag,
extraDetails,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
},
};
};

View File

@@ -94,14 +94,6 @@
v-model="form.unitCode"
clearable
filterable
<<<<<<< HEAD
remote
reserve-keyword
:remote-method="handleUnitCodeSearch"
:loading="unitCodeLoading"
@focus="handleUnitCodeFocus"
=======
>>>>>>> v1.3
@change="handleUnitCodeChange"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>
@@ -269,11 +261,7 @@
clearable
filterable
style="width: 240px"
<<<<<<< HEAD
:disabled="form.isEditInfoDisable === 1"
=======
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>>>>>>> v1.3
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -479,12 +467,7 @@ function getDeptTree() {
/** 查询地点下拉树结构 */
function getLocationTree() {
<<<<<<< HEAD
locationTreeSelect({ formList: '11,16,17' }).then((response) => {
console.log(response, 'response查询部门下拉树结构');
=======
locationTreeSelect({ formList: '11,16' }).then((response) => {
>>>>>>> v1.3
locationOptions.value = response.data.records;
});
}

View File

@@ -103,12 +103,7 @@
:data="deviceList"
@selection-change="handleSelectionChange"
width="90%"
<<<<<<< HEAD
/>
<el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" width="90%" border resizable-column>
=======
>
>>>>>>> v1.3
<el-table-column type="selection" width="50" align="center" />
<el-table-column
label="编码"
@@ -116,11 +111,7 @@
key="busNo"
prop="busNo"
:show-overflow-tooltip="true"
<<<<<<< HEAD
width="200"
=======
width="150"
>>>>>>> v1.3
/>
<el-table-column
label="器材名称"
@@ -128,9 +119,6 @@
key="name"
prop="name"
:show-overflow-tooltip="true"
<<<<<<< HEAD
width="200"
=======
width="100"
/>
<el-table-column
@@ -140,7 +128,6 @@
prop="size"
width="100"
:show-overflow-tooltip="true"
>>>>>>> v1.3
/>
<!-- <el-table-column
label="拼音"
@@ -174,17 +161,6 @@
width="100"
/>
<el-table-column
<<<<<<< HEAD
label="包装规格"
align="center"
key="size"
prop="size"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
=======
>>>>>>> v1.3
label="拆零比"
align="center"
key="partPercent"
@@ -206,11 +182,7 @@
key="minUnitCode_dictText"
prop="minUnitCode_dictText"
:show-overflow-tooltip="true"
<<<<<<< HEAD
width="120"
=======
width="100"
>>>>>>> v1.3
/>
<!-- <el-table-column
label="所属科室"

View File

@@ -129,11 +129,7 @@
clearable
filterable
style="width: 240px"
<<<<<<< HEAD
:disabled="form.isEditInfoDisable === 1"
=======
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>>>>>>> v1.3
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -210,18 +206,9 @@
</el-col>
<el-col :span="8">
<el-form-item label="财务类型" prop="itemTypeCode">
<<<<<<< HEAD
<el-select
v-model="form.itemTypeCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
=======
<el-select v-model="form.itemTypeCode" clearable filterable>
<!-- :disabled="form.isEditInfoDisable === 1" -->
>>>>>>> v1.3
<el-option
v-for="category in fin_type_code"
:key="category.value"
@@ -263,10 +250,6 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="诊疗子项">
<<<<<<< HEAD
<div v-if="form.isEditInfoDisable === 0" style="position: relative">
<PopoverList @search="handleSearch" :width="1000" :modelValue="item.name">
=======
<div style="position: relative">
<PopoverList
@search="handleSearch"
@@ -274,7 +257,6 @@
:modelValue="item.name"
@focus="popoverListhandleFocus(item.name)"
>
>>>>>>> v1.3
<template #popover-content="{}">
<medicineList
@selectRow="(row) => selectRow(row, index)"
@@ -300,11 +282,7 @@
"
/>
</div>
<<<<<<< HEAD
<span v-else>{{ item.name || '' }}</span>
=======
<!-- <span v-else>{{ item.name || '' }}</span> -->
>>>>>>> v1.3
</el-form-item>
</el-col>
<el-col :span="8">
@@ -409,10 +387,6 @@ const diagnosisTreatmentList = ref([]);
const data = reactive({
form: {},
rules: {
<<<<<<< HEAD
busNo: [{ required: true, message: "编码不能为空", trigger: "blur" }],
=======
>>>>>>> v1.3
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
categoryCode: [{ required: true, message: '诊疗目录不能为空', trigger: 'blur' }],
permittedUnitCode: [{ required: true, message: '使用单位不能为空', trigger: 'blur' }],
@@ -678,8 +652,6 @@ function handleSearch(value) {
medicineSearchKey.value = value;
}
<<<<<<< HEAD
=======
function popoverListhandleFocus(value) {
// debugger;
console.log(value);
@@ -689,15 +661,11 @@ function popoverListhandleFocus(value) {
medicineSearchKey.value = value;
}
>>>>>>> v1.3
function selectRow(row, index) {
treatmentItems.value[index].name = row.name;
treatmentItems.value[index].adviceDefinitionId = row.id;
treatmentItems.value[index].retailPrice = row.retailPrice || 0;
<<<<<<< HEAD
=======
medicineSearchKey.value = '';
>>>>>>> v1.3
calculateTotalPrice();
}

View File

@@ -101,86 +101,6 @@
</el-col> -->
</el-row>
<<<<<<< HEAD
<!-- 添加外层滚动容器确保表格可以水平滚动 -->
<div class="table-scroll-container">
<!-- 移除style="width: 100%"让Element UI表格根据内容自动调整 -->
<el-table v-loading="loading" :data="diseaseList" @selection-change="handleSelectionChange" border resizable>
<el-table-column type="selection" width="50" align="center" />
<!-- 使用prop属性并设置合适的最小宽度启用列宽调整 -->
<el-table-column label="编码" align="center" prop="conditionCode" min-width="150" />
<!-- 名称列使用标准配置 -->
<el-table-column
label="名称"
align="center"
prop="name"
min-width="280"
/>
<!-- 其他列使用标准配置 -->
<el-table-column
label="疾病分类"
align="center"
prop="sourceEnum_enumText"
min-width="180"
/>
<el-table-column
label="拼音助记码"
align="center"
prop="pyStr"
min-width="220"
/>
<el-table-column
label="类型"
align="center"
prop="typeCode_dictText"
min-width="120"
/>
<el-table-column
label="医保编码"
align="center"
prop="ybNo"
min-width="180"
/>
<el-table-column
label="医保标记"
align="center"
prop="ybMatchFlag_enumText"
min-width="150"
/>
<el-table-column
label="医保对码标志"
align="center"
prop="ybMatchFlag_enumText"
min-width="150"
/>
<el-table-column
label="状态"
align="center"
prop="statusEnum_enumText"
min-width="150"
/>
<el-table-column
label="描述"
align="center"
prop="description"
min-width="250"
/>
<el-table-column
label="操作"
align="center"
min-width="120"
class-name="small-padding"
>
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>编辑</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
=======
<el-table v-loading="loading" :data="diseaseList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="编码" align="center" key="conditionCode" prop="conditionCode" />
@@ -259,7 +179,6 @@
</el-table-column>
</el-table>
<pagination
>>>>>>> v1.3
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"

View File

@@ -121,15 +121,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="规格" prop="totalVolume">
<<<<<<< HEAD
<el-input
v-model="form.totalVolume"
placeholder=""
clearable
/>
=======
<el-input v-model="form.totalVolume" placeholder="" clearable />
>>>>>>> v1.3
</el-form-item>
</el-col>
<el-col :span="6">
@@ -464,11 +456,7 @@
clearable
filterable
style="width: 240px"
<<<<<<< HEAD
:disabled="form.isEditInfoDisable === 1"
=======
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>>>>>>> v1.3
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -877,25 +865,13 @@ function setValue(row) {
approvalNumber: formatValue(row.approvalNo), // 批准文号
manufacturerText: formatValue(row.manufacturerName), // 生产厂家
basicFlag: formatValue(row.essentialDrugFlag), // 基药标识
<<<<<<< HEAD
// injectFlag: row., // 注射药物
// childrenFlag: row.pediatricUse, // 儿童用药标志
// selfFlag: row., // 自制药标识
// activeFlag: row., // 是否活性
=======
>>>>>>> v1.3
restrictedFlag: formatValue(row.restrictedFlag), // 限制使用
restrictedScope: formatValue(row.restrictedScope), // 限制使用范围
rxFlag: formatValue(row.rxFlag), // 处方标志
chrgitmLv: formatValue(
row.insuranceClass == '甲' ? '1' : row.insuranceClass == '乙' ? '2' : '3'
), // 医保等级
<<<<<<< HEAD
// antibioticFlag: row., // 抗生素
};
=======
};
>>>>>>> v1.3
setFlag(form.value);
}
@@ -912,11 +888,6 @@ function formatValue(str) {
// 显示弹框
function edit() {
<<<<<<< HEAD
// getList();
console.log(props, '22222');
=======
>>>>>>> v1.3
title.value = '编辑药品';
reset();
activeName.value = 'basic';
@@ -973,20 +944,10 @@ function setFlag(data) {
function reset() {
form.value = {
id: undefined,
<<<<<<< HEAD
medicineCode: '',
medicineName: '',
tradeName: '',
spec: '',
manufacturer: '',
rxFlag: '0', // 默认设置为非处方
dose: undefined,
=======
medicationDefId: undefined,
locationId: undefined,
activeFlag: undefined,
doseFrom: undefined,
>>>>>>> v1.3
rateCode: undefined,
approvalNumber: undefined,
name: undefined,
@@ -1032,12 +993,8 @@ function reset() {
thoPartAttributeEnum: undefined,
usageLimit: undefined,
basicFlag: undefined,
<<<<<<< HEAD
chrgitmLv: '3',
=======
rxFlag: undefined,
chrgitmLv: '3', // 默认设置为自费
>>>>>>> v1.3
};
antibioticForm.value = {
antibioticCode: undefined,
@@ -1084,16 +1041,9 @@ function submitForm() {
proxy.$refs['medicationRef'].validate((valid) => {
if (valid) {
<<<<<<< HEAD
// 处理抗生素相关字段
if (form.value.activeFlag == 1) {
form.value.antibioticCode = antibioticForm.value.antibioticCode === undefined ? '3' : antibioticForm.value.antibioticCode;
form.value.restrictedEnum = antibioticForm.value.restrictedEnum === undefined ? '4' : antibioticForm.value.restrictedEnum;
=======
if (form.value.activeFlag == true) {
form.value.antibioticCode = antibioticForm.value.antibioticCode;
form.value.restrictedEnum = antibioticForm.value.restrictedEnum;
>>>>>>> v1.3
form.value.minRateCode = antibioticForm.value.minRateCode;
form.value.maxRateCode = antibioticForm.value.maxRateCode;
form.value.dddUnitCode = antibioticForm.value.dddUnitCode;

View File

@@ -155,11 +155,8 @@
:show-overflow-tooltip="true"
min-width="110"
width="200px"
<<<<<<< HEAD
=======
sortable
:sort-by="(row) => getPinyinFirstLetter(row)"
>>>>>>> v1.3
/>
<el-table-column
label="规格"

View File

@@ -129,9 +129,6 @@ export function getChargeInfo(param) {
method: 'get',
params: param
})
<<<<<<< HEAD
}
=======
}
/**
@@ -154,4 +151,3 @@ export function WxPayResult (data) {
method: 'get',
});
}
>>>>>>> v1.3

View File

@@ -31,43 +31,6 @@
<template v-for="(item, index) in formData.selfPay" :key="index">
<div v-show="item.payEnum != 220500" class="payment-item">
<span>支付方式</span>
<<<<<<< HEAD
<el-select
v-model="item.payEnum"
placeholder="选择支付方式"
style="width: 160px"
@change="clearAmount(index)"
>
<el-option
v-for="payEnum in selfPayMethods"
:key="payEnum.value"
:label="payEnum.label"
:value="payEnum.value"
:disabled="isMethodDisabled(payEnum.value)"
/>
</el-select>
<span>支付金额</span>
<div class="suffix-wrapper">
<el-input-number
v-model="item.amount"
:precision="2"
:min="0"
:max="getMax(index)"
:controls="false"
placeholder="金额"
class="amount-input"
@change="handleAmountChange"
/>
<span class="suffix-text"></span>
</div>
<el-button
type="danger"
circle
:icon="Delete"
@click="removePayment(index)"
v-if="index > 0"
/>
=======
<img
v-if="item.payEnum == 220100 || item.payEnum == 220200"
:src="imgs[item.payEnum == 220100 ? 0 : 1]"
@@ -108,7 +71,6 @@
@click="removePayment(index)"
v-if="index > 0"
/>
>>>>>>> v1.3
</div>
</template>
<div class="add-payment">
@@ -136,8 +98,6 @@
/>
</el-radio-group>
</div>
<<<<<<< HEAD
=======
</div>
<div class="payment-item">
<span>{{ payTypeText }}支付</span>
@@ -149,7 +109,6 @@
/>
<el-button link type="primary" @click="handleWxPay()">扫码支付</el-button>
<el-button link type="primary" @click="getWxPayResult()">查看结果</el-button>
>>>>>>> v1.3
</div>
<div>
<el-table :data="props.details" max-height="200" border>
@@ -194,9 +153,6 @@
</template>
<script setup>
<<<<<<< HEAD
import { savePayment, unprecharge, dispenseMedicalConsumables, getChargeInfo } from './api';
=======
import {
savePayment,
unprecharge,
@@ -205,7 +161,6 @@ import {
WxPayResult,
getChargeInfo,
} from './api';
>>>>>>> v1.3
import { computed, watch, reactive, ref, getCurrentInstance, nextTick } from 'vue';
import { Delete } from '@element-plus/icons-vue';
import { debounce } from 'lodash-es';
@@ -264,13 +219,6 @@ const props = defineProps({
const { proxy } = getCurrentInstance();
<<<<<<< HEAD
const { charge_discount } = proxy.useDict('charge_discount');
const userStore = useUserStore();
const discountRadio = ref(undefined);
const discountAmount = ref(0);
=======
// 单位字典
const { unit_code } = proxy.useDict('unit_code');
@@ -278,7 +226,6 @@ const userStore = useUserStore();
const discountRadio = ref();
const discountAmount = ref(0);
const txtCode = ref('');
>>>>>>> v1.3
const formData = reactive({
totalAmount: 0,
@@ -301,121 +248,6 @@ watch(
const emit = defineEmits(['close']);
let displayAmountTemp = 0;
<<<<<<< HEAD
// 打印小票
function printReceipt(param) {
let total = 0;
props.chargedItems.forEach((item) => {
total += item.totalPrice || 0;
});
// 构造一个新的对象,添加头 "data"
const result = {
data: [
{
...param,
// 基础支付类型
YB_FUND_PAY:
param.detail?.find((t) => t.payEnum === 100000)?.amount.toFixed(2) + ' 元' ?? 0, // 基金支付总额
SELF_PAY: param.detail?.find((t) => t.payEnum === 200000)?.amount.toFixed(2) + ' 元' ?? 0, // 个人负担总金额
OTHER_PAY: param.detail?.find((t) => t.payEnum === 300000)?.amount ?? 0, // 其他(如医院负担金额)
// 基本医保统筹基金支出
YB_TC_FUND_AMOUNT:
param.detail?.find((t) => t.payEnum === 110000)?.amount.toFixed(2) + ' 元' ?? 0, // 基本医保统筹基金支出
YB_BC_FUND_AMOUNT:
param.detail?.find((t) => t.payEnum === 120000)?.amount.toFixed(2) + ' 元' ?? 0, // 补充医疗保险基金支出
YB_JZ_FUND_AMOUNT:
param.detail?.find((t) => t.payEnum === 130000)?.amount.toFixed(2) + ' 元' ?? 0, // 医疗救助基金支出
// YB_OTHER_AMOUNT: param.detail.find((t) => t.payEnum === 140000)?.amount ?? 0, // 其他支出
// 职工基本医疗保险
// YB_TC_ZG_FUND_VALUE: param.detail.find((t) => t.payEnum === 110100)?.amount ?? 0, // 职工基本医疗保险
// YB_TC_JM_FUND_VALUE: param.detail.find((t) => t.payEnum === 110200)?.amount ?? 0, // 居民基本医疗保险(修正原错误注释)
// 补充医疗保险基金支出细分
// YB_BC_JM_DB_VALUE: param.detail.find((t) => t.payEnum === 120100)?.amount ?? 0, // 全体参保人的居民大病保险
// YB_BC_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120200)?.amount ?? 0, // 大额医疗费用补助
// YB_BC_ZG_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120300)?.amount ?? 0, // 企业职工大额医疗费用补助
// YB_BC_GWY_BZ_VALUE: param.detail.find((t) => t.payEnum === 120400)?.amount ?? 0, // 公务员医疗补助
// 其他支出细分
// OTHER_PAY_DD_FUND_VALUE: param.detail.find((t) => t.payEnum === 300001)?.amount ?? 0, // 兜底基金支出
// OTHER_PAY_YW_SH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300002)?.amount ?? 0, // 意外伤害基金支出
// OTHER_PAY_LX_YL_FUND_VALUE: param.detail.find((t) => t.payEnum === 300003)?.amount ?? 0, // 离休人员医疗保障金支出
// OTHER_PAY_LX_YH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300004)?.amount ?? 0, // 离休人员优惠金支出
// OTHER_PAY_CZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300005)?.amount ?? 0, // 财政基金支出
// OTHER_PAY_CZ_YZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300006)?.amount ?? 0, // 财政预支支出
// OTHER_PAY_ZG_DB_FUND_VALUE: param.detail.find((t) => t.payEnum === 300007)?.amount ?? 0, // 职工大病基金支出
// OTHER_PAY_EY_FUND_VALUE: param.detail.find((t) => t.payEnum === 300008)?.amount ?? 0, // 二乙基金支出
// OTHER_PAY_QX_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300009)?.amount ?? 0, // 倾斜救助支出
// OTHER_PAY_YL_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300010)?.amount ?? 0, // 医疗救助再救助基金
// HOSP_PART_AMT: param.detail.find((t) => t.payEnum === 300011)?.amount ?? 0, // 医院负担金额
// 医保结算返回值
FULAMT_OWNPAY_AMT:
param.detail?.find((t) => t.payEnum === 1)?.amount.toFixed(2) + ' 元' ?? 0, // 全自费金额
// OVERLMT_SELFPAY: param.detail.find((t) => t.payEnum === 3)?.amount ?? 0, // 超限价自费费用
// PRESELFPAY_AMT: param.detail.find((t) => t.payEnum === 4)?.amount ?? 0, // 先行自付金额
INSCP_SCP_AMT: param.detail?.find((t) => t.payEnum === 5)?.amount.toFixed(2) + ' 元' ?? 0, // 符合政策范围金额
// ACT_PAY_DEDC: param.detail.find((t) => t.payEnum === 6)?.amount ?? 0, // 实际支付起付线
// POOL_PROP_SELFPAY: param.detail.find((t) => t.payEnum === 7)?.amount ?? 0, // 基本医疗保险统筹基金支付比例
// BALC: param.detail.find((t) => t.payEnum === 8)?.amount ?? 0, // 余额
// 特殊支付方式
SELF_YB_ZH_PAY:
param.detail?.find((t) => t.payEnum === 210000)?.amount.toFixed(2) + ' 元' ?? 0, // 个人医保账户支付
// SELF_YB_ZH_GJ_VALUE: param.detail.find((t) => t.payEnum === 210100)?.amount ?? 0, // 账户共济支付金额
// SELF_CASH_PAY: param.detail.find((t) => t.payEnum === 220000)?.amount ?? 0, // 个人现金支付金额
// SELF_VX_PAY: param.detail.find((t) => t.payEnum === 230000)?.amount ?? 0, // 微信支付金额
// SELF_ALI_PAY: param.detail.find((t) => t.payEnum === 240000)?.amount ?? 0, // 阿里支付金额
// 现金支付细分
// SELF_CASH_VALUE: param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0, // 个人现金支付金额(现金)
// SELF_CASH_VX_VALUE: param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0, // 个人现金支付金额(微信)
// SELF_CASH_ALI_VALUE: param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0, // 个人现金支付金额(支付宝)
// SELF_CASH_UNION_VALUE: param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0, // 个人现金支付金额(银联)
// 基金类型(扩展)
// BIRTH_FUND: param.detail.find((t) => t.payEnum === 510100)?.amount ?? 0, // 生育基金
// RETIREE_MEDICAL: param.detail.find((t) => t.payEnum === 340100)?.amount ?? 0, // 离休人员医疗保障基金
// URBAN_BASIC_MEDICAL: param.detail.find((t) => t.payEnum === 390100)?.amount ?? 0, // 城乡居民基本医疗保险基金
// URBAN_SERIOUS_ILLNESS: param.detail.find((t) => t.payEnum === 390200)?.amount ?? 0, // 城乡居民大病医疗保险基金
// MEDICAL_ASSISTANCE: param.detail.find((t) => t.payEnum === 610100)?.amount ?? 0, // 医疗救助基金
// GOVERNMENT_SUBSIDY: param.detail.find((t) => t.payEnum === 640100)?.amount ?? 0, // 政府兜底基金
// ACCIDENT_INSURANCE: param.detail.find((t) => t.payEnum === 390400)?.amount ?? 0, // 意外伤害基金
// CARE_INSURANCE: param.detail.find((t) => t.payEnum === 620100)?.amount ?? 0, // 照护保险基金
// FINANCIAL_FUND: param.detail.find((t) => t.payEnum === 360100)?.amount ?? 0, // 财政基金
// HOSPITAL_ADVANCE: param.detail.find((t) => t.payEnum === 999900)?.amount ?? 0, // 医院垫付
// SUPPLEMENTARY_INSURANCE: param.detail.find((t) => t.payEnum === 390300)?.amount ?? 0, // 城乡居民大病补充保险基金
// HEALTHCARE_PREPAYMENT: param.detail.find((t) => t.payEnum === 360300)?.amount ?? 0, // 保健预支基金
Mr_QR_Code: param.regNo,
sex: props.patientInfo.genderEnum_enumText,
age: props.patientInfo.age,
personType: '职工医保',
fixmedinsName: param.fixmedinsName + '门诊收费明细',
name: props.patientInfo.patientName, // 姓名
gender: props.patientInfo.genderEnum_enumText, // 性别
age: props.patientInfo.age, // 年龄
encounterBusNo: props.patientInfo.encounterBusNo, // 病例号
currentDate: currentDate.value, // 收费日期
chargedItems: props.chargedItems, // 收费项目
totalAmount: props.totalAmount.toFixed(2) + ' 元', // 应收金额
itemTotalAmount: total.toFixed(2) + ' 元', // 应收金额
displayAmount: displayAmountTemp + ' 元', // 实收金额
returnedAmount: returnedAmount.value + ' 元', // 应找零
userName: userStore.nickName,
},
],
};
const printElements = templateJson;
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result.data[0], {
printer: 'xp',
title: '门诊收费结算单',
});
=======
// 获取单位字典数据的方法
const getUnitLabel = (unitCode) => {
@@ -748,12 +580,9 @@ async function printReceipt(param) {
console.error('打印失败:', error);
proxy.$modal.msgError('打印失败: ' + error.message);
}
>>>>>>> v1.3
}
const throttledGetList = debounce(submit, 300);
<<<<<<< HEAD
=======
function handleWxPay() {
wxPay({
txtCode: txtCode.value,
@@ -778,7 +607,6 @@ function getWxPayResult() {
});
}
>>>>>>> v1.3
function handleOpen() {
formData.totalAmount = props.totalAmount;
formData.selfPay[0].amount = props.totalAmount;
@@ -786,11 +614,6 @@ function handleOpen() {
async function submit() {
displayAmountTemp = displayAmount.value;
<<<<<<< HEAD
console.log(parseFloat(displayAmount.value), 'parseFloat(displayAmount.value)');
console.log(formData.totalAmount, 'formData.totalAmount');
=======
>>>>>>> v1.3
let amount = formData.selfPay
.reduce((sum, item) => {
@@ -813,12 +636,8 @@ async function submit() {
.then((res) => {
if (res.code == 200) {
getChargeInfo({ paymentId: props.paymentId }).then((res) => {
<<<<<<< HEAD
printReceipt(res.data);
=======
// 传递完整的选中数据信息到打印方法
printReceipt({ ...res.data, chargedItems: props.chargedItems });
>>>>>>> v1.3
});
formData.selfPay = [{ payEnum: 220100, amount: 0.0, payLevelEnum: 2 }];
emit('close', 'success', res.msg);
@@ -874,19 +693,11 @@ async function print() {
const currentDate = ref(new Date().toLocaleString());
const selfPayMethods = [
<<<<<<< HEAD
{ label: '现金', value: 220400 },
{ label: '微信', value: 220100 },
{ label: '支付宝', value: 220200 },
{ label: '银联', value: 220300 },
{ label: '优惠', value: 220500 },
=======
{ label: '现金', value: 220400, isWebPay: false },
{ label: '微信', value: 220100, isWebPay: true },
{ label: '支付宝', value: 220200, isWebPay: true },
{ label: '银联', value: 220300, isWebPay: true },
{ label: '优惠', value: 220500, isWebPay: false },
>>>>>>> v1.3
];
// 计算剩余可输入金额

View File

@@ -83,20 +83,6 @@
:disabled="buttonDisabled">
自费转医保
</el-button>
<<<<<<< HEAD
<el-button type="primary" @click="studentPayTosStudentSelf()" style="margin-left: 20px"
:disabled="buttonDisabled">
学生医保转学生自费
</el-button>
<el-button type="primary" @click="studentSelfToStudentPay()" style="margin-left: 20px"
:disabled="buttonDisabled">
学生自费转学生医保
</el-button>
<span style="float: right">合计金额{{ totalAmounts ? totalAmounts.toFixed(2) : 0 }}</span>
</div>
<el-table ref="chargeListRef" height="530" :data="chargeList" row-key="id"
@selection-change="handleSelectionChange" v-loading="chargeLoading" :span-method="objectSpanMethod" border>
=======
<el-button
type="primary"
@click="studentPayTosStudentSelf()"
@@ -127,7 +113,6 @@
:span-method="objectSpanMethod"
border
>
>>>>>>> v1.3
<el-table-column type="selection" :selectable="checkSelectable" width="55" />
<el-table-column label="单据号" align="center" prop="busNo" width="180" />
<el-table-column label="收费项目" align="center" prop="itemName" width="200" />
@@ -137,9 +122,6 @@
<el-table-column label="费用性质" align="center" prop="contractName" />
<el-table-column label="收费状态" align="center" prop="statusEnum_enumText" width="150">
<template #default="scope">
<<<<<<< HEAD
<el-tag :type="scope.row.statusEnum === 1 ? 'default' : 'success'" disable-transitions>
=======
<el-tag v-if="scope.row.statusEnum === 1" disable-transitions>
{{ scope.row.statusEnum_enumText }}
</el-tag>
@@ -150,7 +132,6 @@
{{ scope.row.statusEnum_enumText }}
</el-tag>
<el-tag v-else type="warning" disable-transitions>
>>>>>>> v1.3
{{ scope.row.statusEnum_enumText }}
</el-tag>
</template>
@@ -161,11 +142,6 @@
</template>
</el-table-column>
<el-table-column label="收款人" align="center" prop="entererId_dictText" />
<<<<<<< HEAD
<el-table-column label="操作" align="center" fixed="right" header-align="center" class-name="no-hover-column">
<template #default="scope">
<el-button :disabled="!scope.row.paymentId" link type="primary" @click="printCharge(scope.row)">
=======
<el-table-column
label="操作"
align="center"
@@ -180,7 +156,6 @@
type="primary"
@click="printCharge(scope.row)"
>
>>>>>>> v1.3
打印
</el-button>
</template>
@@ -292,10 +267,6 @@ function handleTotalAmount() {
totalAmounts.value = chargeList.value.reduce((accumulator, currentRow) => {
return new Decimal(accumulator).add(currentRow.totalPrice.toFixed(2) || 0);
}, new Decimal(0));
<<<<<<< HEAD
=======
>>>>>>> v1.3
} else {
totalAmounts.value = selectedRows.value.reduce((accumulator, currentRow) => {
return new Decimal(accumulator).add(currentRow.totalPrice.toFixed(2) || 0);
@@ -652,8 +623,6 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
return [1, 1];
}
<<<<<<< HEAD
=======
// function printCharge(row) {
// // 打印功能实现
// let rows = [];
@@ -667,7 +636,6 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
// proxy.$refs['chargeDialogRef'].printReceipt(res.data);
// });
// }
>>>>>>> v1.3
function printCharge(row) {
// 打印功能实现
let rows = [];
@@ -678,9 +646,6 @@ function printCharge(row) {
});
chargedItems.value = rows;
getChargeInfo({ paymentId: row.paymentId }).then((res) => {
<<<<<<< HEAD
proxy.$refs['chargeDialogRef'].printReceipt(res.data);
=======
// 设置实收金额
if (res.data && res.data.detail) {
const amountDetail = res.data.detail.find((item) => item.payEnum == 220000);
@@ -712,7 +677,6 @@ function printCharge(row) {
proxy.$refs['chargeDialogRef'].printReceipt(enhancedPrintData);
});
}
>>>>>>> v1.3
});
}
</script>
@@ -724,8 +688,4 @@ function printCharge(row) {
:deep(.el-table__body) tr:hover td.no-hover-column {
background-color: inherit !important;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -166,16 +166,6 @@ const props = defineProps({
type: Object,
default: undefined,
},
<<<<<<< HEAD
medfee_paymtd_code: {
type: Array,
default: () => [],
},
feeType: {
type: String,
default: '',
}
=======
orgId: {
type: String,
default: '',
@@ -184,7 +174,6 @@ const props = defineProps({
type: String,
default: '',
},
>>>>>>> v1.3
});
const { proxy } = getCurrentInstance();

View File

@@ -228,38 +228,6 @@ export function gerPreInfo(userMaessage) {
return request({
url: '/yb-request/per-info',
method: 'post',
<<<<<<< HEAD
params: userMaessage
})
}
/**
* 根据就诊卡号查询挂号记录
* 注意此接口可能不存在实际使用getOutpatientRegistrationCurrent接口
* 保留此函数以便将来使用目前使用getOutpatientRegistrationCurrent替代
*/
export function getRegistrationByCardNo(query) {
// 如果后端提供了专门的接口,可以取消注释使用
// return request({
// url: '/charge-manage/register/encounter-by-card',
// method: 'get',
// params: query
// })
// 暂时使用现有的接口
return getOutpatientRegistrationCurrent(query);
}
/**
* 补打挂号
*/
export function reprintRegistration(data) {
return request({
url: '/charge-manage/register/reprint',
method: 'post',
data: data
})
}
=======
params: userMaessage,
});
}
@@ -285,4 +253,3 @@ export function WxPayResult(data) {
data: data,
});
}
>>>>>>> v1.3

View File

@@ -10,10 +10,6 @@
<el-input v-model="form.name" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<<<<<<< HEAD
<el-col :span="6">
<el-form-item label="民族" prop="nationalityCode" label-width="80px">
=======
<el-col :span="8">
<el-form-item label="性别" prop="genderEnum">
<el-radio-group v-model="form.genderEnum" :disabled="isViewMode">
@@ -66,7 +62,6 @@
</el-col>
<el-col :span="8">
<el-form-item label="民族" prop="nationalityCode">
>>>>>>> v1.3
<el-select v-model="form.nationalityCode" clearable filterable :disabled="isViewMode">
<el-option
v-for="item in nationality_code"
@@ -106,87 +101,10 @@
<!-- 第二行证件类别证件号码*年龄 -->
<el-row :gutter="10">
<el-col :span="8">
<<<<<<< HEAD
<el-form-item label="证件类别" prop="typeCode" label-width="80px">
<el-select
v-model="form.typeCode"
placeholder="就诊卡"
clearable
:disabled="isViewMode"
>
<el-option
v-for="dict in sys_idtype"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="证件号码" prop="idCard" label-width="80px">
<el-input v-model="form.idCard" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="年龄" prop="age" label-width="80px">
<el-input
v-model="form.age"
:disabled="isViewMode"
@input="handleAgeInput"
placeholder="请输入龄"
>
<template #suffix></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行国籍*联系方式工作单位 -->
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="国籍" prop="countryCode" label-width="80px">
<el-select v-model="form.countryCode" placeholder="请选择国籍" clearable filterable :disabled="isViewMode">
<el-option
v-for="item in countryCodeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系方式" prop="phone" label-width="80px">
<el-input v-model="form.phone" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生日期" prop="birthDate">
<el-date-picker
v-model="form.birthDate"
type="date"
placeholder="请选择出生日期"
format="YYYY年MM月DD日"
:disabled="isViewMode"
value-format="YYYY-MM-DD"
@change="handleBirthDateChange"
/>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行就诊卡号职业邮政编码 -->
<el-row>
<el-col :span="8">
=======
>>>>>>> v1.3
<el-form-item label="就诊卡号" prop="identifierNo">
<el-input v-model="form.identifierNo" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<<<<<<< HEAD
=======
<!-- <el-col :span="8">
<el-form-item label="国家编码" prop="countryCode">
<el-input v-model="form.countryCode" clearable :disabled="isViewMode" />
@@ -199,7 +117,6 @@
</el-form-item>
</el-col> -->
<el-row>
>>>>>>> v1.3
<el-col :span="8">
<el-form-item label="职业" prop="prfsEnum">
<el-select v-model="form.prfsEnum" placeholder="职业" clearable :disabled="isViewMode">
@@ -423,11 +340,7 @@
</template>
<script setup name="PatientAddDialog">
<<<<<<< HEAD
import { watch, defineProps } from "vue";
=======
import { watch } from 'vue';
>>>>>>> v1.3
import pcas from 'china-division/dist/pcas-code.json';
import { addPatient, patientlLists, getOutpatientRegistrationList } from './outpatientregistration';
import {
@@ -689,21 +602,9 @@ const validateGuardianInfo = (rule, value, callback) => {
const data = reactive({
isViewMode: false,
form: {
<<<<<<< HEAD
typeCode: '08',
birthDate: undefined,
age: undefined,
genderEnum: '1', // 默认设置为'男'
hukouAddressSelect: undefined,
hukouAddress: undefined,
postalCode: undefined,
companyAddress: undefined,
patientDerived: undefined,
=======
typeCode: '01',
tempFlag: '1',
// genderEnum: 0,
>>>>>>> v1.3
},
rules: {
name: [{ required: true, message: '姓名不能为空', trigger: 'change' },
@@ -720,22 +621,7 @@ const data = reactive({
genderEnum: [{ required: true, message: '请选择性别', trigger: 'change' }],
age: [{ required: true, message: '年龄不能为空', trigger: 'change' }],
phone: [{ required: true, message: '联系方式不能为空', trigger: 'change' }],
<<<<<<< HEAD
identifierNo: [{ required: true, message: '就诊卡号不能为空', trigger: 'change' }],
idCard: [
{ required: false, message: '证件号码不能为空', trigger: 'change' },
{ validator: validateIdCard, trigger: 'blur' },
{ validator: validateUniquePatient, trigger: 'blur' }
],
birthDate: [{ required: false, message: '请选择出生日期', trigger: 'change' }],
// 监护人信息条件验证规则
guardianName: [{ validator: validateGuardianInfo, trigger: 'blur' }],
guardianRelation: [{ validator: validateGuardianInfo, trigger: 'blur' }],
guardianPhone: [{ validator: validateGuardianInfo, trigger: 'blur' }],
guardianIdNo: [{ validator: validateGuardianInfo, trigger: 'blur' }],
=======
idCard: [{ required: true, message: '证件号不能为空', trigger: 'change' }],
>>>>>>> v1.3
},
});
@@ -757,76 +643,6 @@ const props = defineProps({
}
});
<<<<<<< HEAD
// 处理出生日期变化,自动计算年龄
function handleBirthDateChange() {
if (form.value.birthDate) {
const birthDate = new Date(form.value.birthDate);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
// 计算精确年龄
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
form.value.age = age;
}
}
// 处理年龄输入,自动计算出生日期
function handleAgeInput() {
// 提取数字部分
const ageMatch = form.value.age.match(/\d+/);
if (ageMatch) {
const age = parseInt(ageMatch[0]);
// 移除非数字字符,保留数字和可能的单位
form.value.age = age ;
// 计算出生日期
const today = new Date();
const birthYear = today.getFullYear() - age;
const birthMonth = today.getMonth();
const birthDay = today.getDate();
const birthDate = new Date(birthYear, birthMonth, birthDay);
// 格式化为YYYY-MM-DD
const formattedBirthDate = birthDate.toISOString().split('T')[0];
form.value.birthDate = formattedBirthDate;
}
}
watch(
() => form.value.idCard,
(newIdCard) => {
if (newIdCard && newIdCard.length === 18) {
const birthYear = parseInt(newIdCard.substring(6, 10));
const birthMonth = parseInt(newIdCard.substring(10, 12));
const birthDay = parseInt(newIdCard.substring(12, 14));
// 设置出生日期
form.value.birthDate = `${birthYear}-${birthMonth.toString().padStart(2, '0')}-${birthDay.toString().padStart(2, '0')}`;
const today = new Date();
const currentYear = today.getFullYear();
const currentMonth = today.getMonth() + 1;
const currentDay = today.getDate();
let age = currentYear - birthYear;
// 如果当前月份小于出生月份或者月份相同但当前日期小于出生日期则年龄减1
if (currentMonth < birthMonth || (currentMonth === birthMonth && currentDay < birthDay)) {
age--;
}
form.value.age = age;
form.value.age = age ;
}
}
);
=======
// watch(
// () => form.value.idCard,
// (newIdCard) => {
@@ -851,7 +667,6 @@ watch(
// }
// }
// );
>>>>>>> v1.3
/** 查询菜单列表 */
function getList() {
patientlLists().then((response) => {

View File

@@ -11,11 +11,7 @@
<el-text size="large" style="display: block; margin-bottom: 15px">
退费日期{{ currentDate }}
</el-text>
<<<<<<< HEAD
<el-text size="large">费用性质{{ getFeeTypeText }}</el-text>
=======
<el-text size="large">费用性质{{ props.category || '自费' }}</el-text>
>>>>>>> v1.3
<div class="amount-row">
<el-text size="large">应退金额</el-text>
<el-text size="large" type="primary" class="amount">
@@ -160,39 +156,16 @@ const props = defineProps({
type: [],
default: [],
},
<<<<<<< HEAD
medfee_paymtd_code: {
type: Array,
default: () => [],
},
feeType: {
type: String,
default: '',
},
contractName: {
type: String,
default: '', // 新增:接收费用性质名称
},
registerInfo: {
type: Object,
default: () => ({}), // 原挂号记录信息
}
=======
eventType: {
type: String,
default: 1,
},
>>>>>>> v1.3
});
const { proxy } = getCurrentInstance();
const reason = ref('');
<<<<<<< HEAD
const userStore = useUserStore();
=======
const preCancelData = ref([]);
const loading = ref(false);
>>>>>>> v1.3
const formData = reactive({
totalAmount: 0,
@@ -255,29 +228,10 @@ watch(
function submit() {
console.log(props.chargeItemIds);
<<<<<<< HEAD
if (parseFloat(displayAmount.value) < formData.totalAmount) {
proxy.$modal.msgError('请输入正确的金额');
return;
}
// 获取当前时间作为退号操作日期
const returnDate = formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss');
// 获取当前用户信息作为操作工号(使用用户管理中的用户账号)
// userStore.name 对应后端的 userName用户账号如 'admin'
const operatorId = userStore.name || null; // 退号操作工号(用户账号)
const operatorName = userStore.nickName || userStore.name || ''; // 退号操作人姓名
// 计算退款总金额
const refundAmount = formData.selfPay.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
=======
// if (parseFloat(displayAmount.value) < formData.totalAmount) {
// proxy.$modal.msgError('请输入正确的金额');
// return;
// }
>>>>>>> v1.3
cancelRegister({
paymentEnum: 0,
kindEnum: 1,

View File

@@ -43,8 +43,6 @@
</el-popover>
</el-form-item>
</el-col>
<<<<<<< HEAD
=======
<el-col :span="6" style="padding: 0">
<el-button type="primary" icon="Plus" @click="handleAddPatient" style="width: 65px">
新建
@@ -77,7 +75,6 @@
学生卡
</el-button> -->
</el-col>
>>>>>>> v1.3
<el-col :span="5">
<el-form-item label="姓名:" prop="name">
<el-input v-model="form.name" placeholder="姓名" :disabled="true" />
@@ -280,10 +277,6 @@
setchargeItem;
}
"
<<<<<<< HEAD
@clear="handleOrgClear"
=======
>>>>>>> v1.3
clearable
/>
</el-form-item>
@@ -554,100 +547,6 @@
<span>{{ parseTime(scope.row.registerTime) }}</span>
</template>
</el-table-column>
<<<<<<< HEAD
<!-- 退号记录相关列 -->
<el-table-column
v-if="queryType === 'returned'"
label="退号日期/时间"
align="center"
key="returnDate"
prop="returnDate"
width="180"
>
<template #default="scope">
<span>{{ scope.row.returnDate ? parseTime(scope.row.returnDate) : '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退号原因"
align="center"
key="returnReason"
prop="returnReason"
width="200"
:show-overflow-tooltip="true"
>
<template #default="scope">
<span>{{ scope.row.returnReason || '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退号操作人"
align="center"
key="operatorName"
prop="operatorName"
width="120"
>
<template #default="scope">
<span>{{ scope.row.operatorName || '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退号操作工号"
align="center"
key="operatorId"
prop="operatorId"
width="120"
>
<template #default="scope">
<span>{{ scope.row.operatorId || '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退款金额"
align="center"
key="refundAmount"
prop="refundAmount"
width="120"
>
<template #default="scope">
<span>{{ scope.row.refundAmount ? scope.row.refundAmount.toFixed(2) + ' 元' : '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退款方式"
align="center"
key="refundMethod"
prop="refundMethod"
width="150"
>
<template #default="scope">
<span>{{ scope.row.refundMethod || '-' }}</span>
</template>
</el-table-column>
<!-- 操作列只在全部和正常挂号标签页显示退号记录标签页不显示 -->
<el-table-column
v-if="queryType !== 'returned'"
label="操作"
align="center"
width="120"
fixed="right"
>
<template #default="scope">
<el-button
link
type="primary"
:disabled="scope.row.statusEnum === 6 || scope.row.statusEnum !== 1"
:title="getReturnTooltip(scope.row)"
@click="handleReturn(scope.row)"
>
退号
</el-button>
=======
<el-table-column label="操作" align="center" key="registerTime" prop="registerTime" do>
<template #default="scope">
<!-- <el-tooltip
@@ -675,7 +574,6 @@
</el-button>
</div>
<!-- </el-tooltip> -->
>>>>>>> v1.3
</template>
</el-table-column>
</el-table>
@@ -725,25 +623,7 @@
:patientInfo="patientInfo"
:paymentId="paymentId"
:chargeItemIds="chargeItemIdList"
<<<<<<< HEAD
:feeType="patientInfo.medfeePaymtdCode || ''"
:contractName="patientInfo.contractName || ''"
:medfee_paymtd_code="medfee_paymtd_code"
:registerInfo="registerInfo"
/>
<ReprintDialog
:open="openReprintDialog"
@close="
(value) => {
if (value == 'success') {
getList();
}
openReprintDialog = false;
}
"
=======
:eventType="eventType"
>>>>>>> v1.3
/>
</div>
</template>
@@ -776,26 +656,11 @@ import ReprintDialog from './components/reprintDialog.vue';
import { handleColor } from '@/utils/his';
import useUserStore from '@/store/modules/user';
import { formatDate, formatDateStr } from '@/utils/index';
<<<<<<< HEAD
import { getConfigKey } from '@/api/system/config';
const patientInfo = ref({});
// 监护人规定年龄配置
const guardianAgeConfig = ref(null);
// 跳转到患者档案管理页面
const goToPatientRecord = () => {
// 使用Vue Router进行路由导航在当前页面打开新的路由层级
router.push('/system/basicmanage/patientmanagement');
};
=======
import { isValidCNPhoneNumber } from '../../../utils/validate';
import { ElMessage } from 'element-plus';
const patientInfo = ref({});
const eventType = ref(0);
>>>>>>> v1.3
const router = useRouter();
const { proxy } = getCurrentInstance();
const { sys_normal_disable, sys_user_sex, med_chrgitm_type,medfee_paymtd_code } = proxy.useDict(
@@ -846,14 +711,8 @@ const patientInfoList = ref(undefined);
// 费用性质
const contractList = ref(undefined);
// const locationOptions = ref(undefined); // 地点树选项
<<<<<<< HEAD
const doctorList = ref(undefined); // 医生选项(过滤后的)
const allDoctorList = ref(undefined); // 所有医生选项(用于过滤)
const healthcareList = ref(undefined); // 挂号项目选项
=======
const doctorList = ref(undefined); // 医生选项
const healthcareList = ref([]); // 挂号项目选项
>>>>>>> v1.3
const orgOptions = ref(undefined); // 科室选项
const readCardLoading = ref(false);
const transformedData = ref({});
@@ -1171,32 +1030,6 @@ function setchargeItem() {
healthcareData.length > 0 ? healthcareData[0].price + healthcareData[0].activityPrice : '';
form.value.definitionId = healthcareData.length > 0 ? healthcareData[0].definitionId : '';
}
<<<<<<< HEAD
}
/** 处理挂号类型变化 */
function handleServiceTypeChange() {
// 先设置费用项信息
setchargeItem();
// 然后根据就诊科室和挂号类型过滤医生
filterDoctorsByHealthcare();
}
/** 处理科室清空 */
function handleOrgClear() {
// 清空科室时,清空相关数据
form.value.orgId = undefined;
form.value.organizationId = undefined;
healthcareList.value = [];
form.value.serviceTypeId = undefined;
form.value.practitionerId = undefined;
form.value.doctorName = '';
// 如果有医生列表,显示所有医生
if (allDoctorList.value) {
doctorList.value = allDoctorList.value;
}
=======
>>>>>>> v1.3
}
/** 查询患者信息 */
function getList() {
@@ -1479,10 +1312,6 @@ function handleAdd() {
transformedData.value = transformFormData(form.value);
console.log(transformedData, 'transformedData门诊挂号');
chargeItemIdList.value = [];
<<<<<<< HEAD
patientInfo.value.patientId = form.value.patientId;
patientInfo.value.medfeePaymtdCode = form.value.contractNo; // 设置费用性质
=======
// patientInfo.value.patientId = form.value.patientId;
patientInfo.value = {
patientId: form.value.patientId,
@@ -1500,7 +1329,6 @@ function handleAdd() {
practitionerName: form.value.doctorName || '',
healthcareName: '', // 可根据实际情况补充
};
>>>>>>> v1.3
proxy.$refs['outpatientRegistrationRef'].validate((valid) => {
if (valid) {
if (!isValidCNPhoneNumber(patientInfo.value.phone)) {
@@ -1518,15 +1346,8 @@ function handleAdd() {
addOutpatientRegistration(transformedData.value)
.then((res) => {
if (res.code == 200) {
<<<<<<< HEAD
console.log('挂号成功,返回数据:', res.data);
// 立即刷新列表,确保挂号信息显示在当日已挂号列表中
getList();
=======
console.log('78989798', 'res', res);
// proxy.$modal.msgSuccess('挂号成功');
>>>>>>> v1.3
chrgBchno.value = res.data.chrgBchno;
registerBusNo.value = res.data.busNo;
totalAmount.value = res.data.psnCashPay;
@@ -1583,56 +1404,15 @@ function handleSearchPatient(value) {
patientSearchKey.value = value;
}
<<<<<<< HEAD
function getReturnTooltip(row) {
if (!row) {
return '';
}
if (row.statusEnum == 6) {
return '已退号';
}
if (row.statusEnum != 1) {
return '该患者医生已接诊,不能退号!';
}
return '';
}
function handleReturn(row) {
if (row.statusEnum != 1) {
proxy.$modal.msgError('该患者医生已接诊,不能退号!');
return;
}
=======
function handleReturn(row, type = '1') {
>>>>>>> v1.3
openRefundDialog.value = true;
patientInfo.value.patientId = row.patientId;
patientInfo.value.encounterId = row.encounterId;
totalAmount.value = row.totalPrice;
chargeItemIdList.value = row.chargeItemIds.split(',');
paymentId.value = row.paymentId;
<<<<<<< HEAD
// 从挂号记录中获取正确的费用性质
patientInfo.value.medfeePaymtdCode = row.contractNo; // 使用挂号记录中的费用性质代码
patientInfo.value.contractName = row.contractName; // 保存费用性质名称用于显示
// 保存完整的原挂号记录信息,用于退号记录
registerInfo.value = {
...row, // 保存完整的挂号记录
patientName: row.patientName,
age: row.age,
genderEnum_enumText: row.genderEnum_enumText,
registerTime: row.registerTime,
totalPrice: row.totalPrice,
encounterId: row.encounterId,
patientId: row.patientId,
};
console.log('退号费用性质:', row.contractNo, row.contractName);
=======
eventType.value = type;
console.log(paymentId.value);
>>>>>>> v1.3
}
function handleReturnRegister() {

View File

@@ -110,11 +110,7 @@
"top": 57,
"height": 13.5,
"width": 145.5,
<<<<<<< HEAD
"title": "机构名称:长春大学医院",
=======
"title": "机构名称:长春市朝阳区中医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 9,

View File

@@ -357,11 +357,7 @@ async function print() {
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
nickName: userStore.nickName,
orgName: userStore.orgName,
<<<<<<< HEAD
fixmedinsName: '长春大学医院',
=======
fixmedinsName: '长春市朝阳区中医院医院',
>>>>>>> v1.3
queryTime: queryTime.value[0] + '~' + queryTime.value[1],
zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0),
feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0)

View File

@@ -473,11 +473,7 @@ async function print() {
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
nickName: userStore.nickName,
orgName: userStore.orgName,
<<<<<<< HEAD
fixmedinsName: userStore.hospitalName,
=======
fixmedinsName: userStore.hospitalName,
>>>>>>> v1.3
createTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'),
scheduler: userStore.nickName,
timeRange: queryTime.value[0] + '~' + queryTime.value[1],

View File

@@ -92,8 +92,6 @@ export function printBloodCode (query) {
params: query,
});
}
<<<<<<< HEAD
=======
/**
@@ -106,4 +104,3 @@ export function getEnPrescriptionInfo(data) {
params: data,
});
}
>>>>>>> v1.3

View File

@@ -33,13 +33,8 @@
"left": 0,
"top": 22.5,
"height": 12,
<<<<<<< HEAD
"width": 88.5,
"title": "长春大学医院",
=======
"width": 420,
"title": "长春市朝阳区中医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 13.5,

View File

@@ -8,11 +8,7 @@
@close="close"
>
<el-table :data="recordList" highlight-current-row max-height="650" style="width: 100%" border>
<<<<<<< HEAD
<el-table-column prop="occurrenceTime" label="执行时间" align="center" />
=======
<el-table-column prop="recordTime" label="执行时间" align="center" />
>>>>>>> v1.3
<el-table-column prop="statusEnum_enumText" label="执行状态" align="center" />
<el-table-column prop="orgName" label="执行科室" align="center" />
<el-table-column prop="practitionerName" label="执行人" align="center" />

View File

@@ -37,11 +37,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -44,24 +44,16 @@
<el-table-column prop="patientName" label="姓名" align="center" />
<el-table-column prop="genderEnum_enumText" label="性别" align="center" />
<el-table-column prop="age" label="年龄" align="center" />
<<<<<<< HEAD
=======
<el-table-column prop="receptionTime" label="挂号时间" align="center" />
>>>>>>> v1.3
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
<<<<<<< HEAD
layout="total, sizes, prev, pager, next"
@pagination="getPatientList"
=======
@pagination="getPatientList"
:pager-count="1"
:layout="'total, prev, pager, next'"
>>>>>>> v1.3
/>
</el-col>
</el-row>
@@ -106,10 +98,7 @@
>
打印处置单
</el-button>
<<<<<<< HEAD
=======
<el-button type="primary" plain @click.stop="getEnPrescription()"> 处方单 </el-button>
>>>>>>> v1.3
</el-col>
<el-col :xs="24" :sm="12" :md="6">
<el-form
@@ -296,28 +285,16 @@
</template>
</el-table-column>
<el-table-column align="center" header-align="center" prop="unitPrice" label="单价">
<<<<<<< HEAD
<template #default="scope">
<span>
{{ scope.unitPrice ? scope.unitPrice.toFixed(2) : '0.00' + ' 元' }}
=======
<template #default="{ row }">
<span>
{{ row.unitPrice ? row.unitPrice.toFixed(2) : '0.00' + ' 元' }}
>>>>>>> v1.3
</span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" prop="totalPrice" label="总价">
<<<<<<< HEAD
<template #default="scope">
<span>
{{ scope.totalPrice ? scope.totalPrice.toFixed(2) : '0.00' + ' 元' }}
=======
<template #default="{ row }">
<span>
{{ row.totalPrice ? row.totalPrice.toFixed(2) : '0.00' + ' 元' }}
>>>>>>> v1.3
</span>
</template>
</el-table-column>
@@ -358,11 +335,8 @@ import { formatDateStr } from '@/utils';
import { hiprint } from 'vue-plugin-hiprint';
import useUserStore from '@/store/modules/user';
import { getGroupMarkers } from '@/utils/his';
<<<<<<< HEAD
=======
import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
>>>>>>> v1.3
// 患者搜索
const queryParams = ref({
pageNo: 1,
@@ -450,10 +424,6 @@ function handleServiceCategoryChange(value) {
deviceList.value = res.data.records.filter((item) => {
return item.requestTable == 'wor_device_request';
});
<<<<<<< HEAD
=======
>>>>>>> v1.3
activityList.value = res.data.records.filter((item) => {
return (
item.requestTable == 'wor_service_request' ||
@@ -537,8 +507,6 @@ function handleBatchValidate(type) {
};
});
<<<<<<< HEAD
=======
// 批量操作校验
function handleBatchValidate(type) {
let params = [];
@@ -577,7 +545,6 @@ function handleBatchValidate(type) {
};
});
>>>>>>> v1.3
return [...activityList, ...deviceList];
} else if (type === 'cancel') {
let list = [...activitySelectedList.value, ...deviceSelectedList.value];
@@ -742,8 +709,6 @@ function printPrescription() {
}); //开始打印
});
}
<<<<<<< HEAD
=======
// 查看本次就诊处方单
function getEnPrescription() {
getEnPrescriptionInfo({ encounterId: currentPatient.value.encounterId }).then((res) => {
@@ -761,7 +726,6 @@ function getEnPrescription() {
});
}
>>>>>>> v1.3
// 打印处置单
function printDisposal() {
let requestIds = deviceActivityList.value
@@ -869,9 +833,6 @@ function handleCancel(row) {
});
}
// 打印瓶贴
<<<<<<< HEAD
function printBottleLabel() {
=======
// function printBottleLabel() {
// let result = [];
// // 过滤出全部输液药品
@@ -966,7 +927,6 @@ function printBottleLabel() {
// });
// }
async function printBottleLabel() {
>>>>>>> v1.3
let result = [];
// 过滤出全部输液药品
let selectRows = activityListRef.value.getSelectionRows();
@@ -1045,16 +1005,6 @@ async function printBottleLabel() {
infuseData: item,
};
});
<<<<<<< HEAD
const printElements = templateJson;
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
console.log(result, '打印机列表');
hiprintTemplate.print2(result, {
// printer: 'Xprinter XP-365B',
height: 210,
width: 148,
});
=======
console.log(result, '打印数据');
await simplePrint(PRINT_TEMPLATE.OUTPATIENT_INFUSION, result);
// console.log('打印成功');
@@ -1065,7 +1015,6 @@ async function printBottleLabel() {
// height: 210,
// width: 148,
// });
>>>>>>> v1.3
// 直接打印回调
// 发送任务到打印机成功
// hiprintTemplate.on('printSuccess', function (e) {
@@ -1285,8 +1234,4 @@ function getRecord(row) {
:deep(.el-table__body) tr:hover td.no-hover-column {
background-color: inherit !important;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -27,11 +27,7 @@
<span>CF0000000001</span>
</div>
<div style="text-align: center">
<<<<<<< HEAD
<h2>长春大学医院</h2>
=======
<h2>长春市朝阳区中医院医院</h2>
>>>>>>> v1.3
</div>
<div style="text-align: center">
<h3>处方单</h3>

View File

@@ -211,28 +211,6 @@ watch(
{ deep: true }
);
<<<<<<< HEAD
getList();
// function getList() {
// queryParams.value.organizationId = props.patientInfo.orgId;
// getAdviceBaseInfo(queryParams.value).then((res) => {
// if (res.data.records.length > 0) {
// adviceBaseList.value = res.data.records.filter((item) => {
// if (item.adviceType == 1 || item.adviceType == 2) {
// return handleQuantity(item) != 0;
// } else {
// return true;
// }
// });
// total.value = res.data.total;
// nextTick(() => {
// currentIndex.value = 0;
// // adviceBaseRef.value.setCurrentRow(adviceBaseList.value[0]);
// });
// }
// });
// }
=======
getList();
function getList() {
queryParams.value.organizationId = props.patientInfo.orgId;
@@ -253,7 +231,6 @@ function getList() {
}
});
}
>>>>>>> v1.3
// 从priceList列表中获取价格
function getPriceFromInventory(row) {
if (row.priceList && row.priceList.length > 0) {

View File

@@ -273,12 +273,7 @@ export function singOut(data) {
url: '/doctor-station/advice/sign-off',
method: 'post',
data: data,
<<<<<<< HEAD
skipErrorMsg: true
})
=======
});
>>>>>>> v1.3
}
/**
* 获取患者本次就诊处方

View File

@@ -269,25 +269,6 @@ function removeDiagnosis(row, index) {
}
function save() {
<<<<<<< HEAD
// 为每个诊断项添加诊断医生和诊断时间
const diagnosisChildList = tcmDiagonsisSaveList.value.map(item => ({
...item,
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || '',
diagnosisTime: new Date().toLocaleString('zh-CN')
}));
saveTcmDiagnosis({
patientId: props.patientInfo.patientId,
encounterId: props.patientInfo.encounterId,
diagnosisChildList: diagnosisChildList,
}).then((res) => {
if (res.code == 200) {
emit('close');
proxy.$modal.msgSuccess('诊断已保存');
}
});
=======
if(props.updateZy.length>0){
updateTcmDiagnosis({
patientId: props.patientInfo.patientId,
@@ -312,7 +293,6 @@ function save() {
});
}
>>>>>>> v1.3
}
function submit() {

View File

@@ -8,10 +8,6 @@
<el-button icon="Search" @click="queryDiagnosisUse" />
</template>
</el-input>
<<<<<<< HEAD
<el-tree ref="treeRef" :data="tree" node-key="id" :props="{ label: 'name', children: 'children' }"
highlight-current default-expand-all :filter-node-method="filterNode" @node-click="handleNodeClick">
=======
<el-tree
ref="treeRef"
:data="tree"
@@ -24,22 +20,17 @@
@node-click="handleNodeClick"
max-height="650"
>
>>>>>>> v1.3
<template #default="{ node, data }">
<div class="custom-tree-node">
<span>{{ node.label }}</span>
<span class="tree-node-actions">
<template v-if="node.level === 1 && data.name != '常用' && data.name != '历史'">
<<<<<<< HEAD
<el-button style="color: #000000" type="text" size="small" @click.stop="addChild(data)">
=======
<el-button
style="color: #000000"
type="text"
size="small"
@click.stop="addChild(data)"
>
>>>>>>> v1.3
<el-icon>
<Plus />
</el-icon>
@@ -48,13 +39,6 @@
<el-popconfirm width="200" :hide-after="10" title="确认删除此常用诊断吗" placement="top-start"
@confirm="deleteChild(data)">
<template #reference>
<<<<<<< HEAD
<el-button style="color: #000000" v-if="
node.level === 2 &&
node.parent.data.name != '常用' &&
node.parent.data.name != '历史'
" type="text" size="small" @click.stop="">
=======
<el-button
style="color: #000000"
v-if="
@@ -66,7 +50,6 @@
size="small"
@click.stop=""
>
>>>>>>> v1.3
<el-icon>
<Minus />
</el-icon>
@@ -117,11 +100,6 @@
<el-table-column label="诊断名称" align="center" prop="name">
<template #default="scope">
<el-form-item :prop="`diagnosisList.${scope.$index}.name`" :rules="rules.name">
<<<<<<< HEAD
<el-popover :popper-style="{ padding: '0' }" placement="bottom-start" :visible="scope.row.showPopover"
trigger="manual" :width="800">
<diagnosislist :diagnosisSearchkey="diagnosisSearchkey" @selectDiagnosis="handleSelsectDiagnosis" />
=======
<el-popover
:popper-style="{ padding: '0' }"
placement="bottom-start"
@@ -134,7 +112,6 @@
:diagnosisSearchkey="diagnosisSearchkey"
@selectDiagnosis="handleSelsectDiagnosis"
/>
>>>>>>> v1.3
<template #reference>
<el-input v-model="scope.row.name" placeholder="请选择诊断" @input="handleChange"
@focus="handleFocus(scope.row, scope.$index)" @blur="handleBlur(scope.row)" />
@@ -143,17 +120,9 @@
</el-form-item>
</template>
</el-table-column>
<<<<<<< HEAD
<el-table-column label="诊断医生" align="center" prop="diagnosisDoctor" width="120" />
<el-table-column label="诊断时间" align="center" prop="diagnosisTime" width="150" />
<el-table-column label="诊断代码" align="center" prop="ybNo" width="180" />
<el-table-column label="诊断类型" align="center" prop="maindiseFlag" width="120">
=======
<el-table-column label="医保码" align="center" prop="ybNo" width="180" />
<el-table-column label="类别" align="center" prop="typeName" width="100" />
<el-table-column label="诊断类型" align="center" prop="maindiseFlag">
>>>>>>> v1.3
<template #default="scope">
<div style="display:flex;flex-direction:column;align-items:center;gap:5px;">
<el-checkbox
@@ -192,11 +161,6 @@
</el-form>
</el-col>
</el-row>
<<<<<<< HEAD
<diagnosisdialog :openDiagnosis="openDiagnosis" @close="closeDiagnosisDialog" :radio="orgOrUser" />
<AddDiagnosisDialog :openAddDiagnosisDialog="openAddDiagnosisDialog" :patientInfo="props.patientInfo"
@close="closeDiagnosisDialog" />
=======
<diagnosisdialog
:openDiagnosis="openDiagnosis"
@close="closeDiagnosisDialog"
@@ -208,7 +172,6 @@
:patientInfo="props.patientInfo"
@close="closeDiagnosisDialog"
/>
>>>>>>> v1.3
</div>
</template>
@@ -287,46 +250,6 @@ function refreshData() {
}
let maxNo = 99;
function getList() {
<<<<<<< HEAD
if (!props.patientInfo || !props.patientInfo.encounterId) {
console.warn('患者就诊信息不完整,无法获取诊断数据');
return;
}
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
if (res.code == 200) {
// 为每个诊断项添加默认的诊断医生和时间(如果不存在)
form.value.diagnosisList = res.data.map(item => ({
...item,
diagnosisDoctor: item.diagnosisDoctor || props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
diagnosisTime: item.diagnosisTime || new Date().toLocaleString('zh-CN')
}));
// 获取诊断列表后按排序号排序
form.value.diagnosisList.sort((a, b) => (a.diagSrtNo || 0) - (b.diagSrtNo || 0));
emits('diagnosisSave', false);
}
});
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res.code == 200) {
if (res.data.illness && res.data.illness.length > 0 && res.data.symptom) {
res.data.illness.forEach((item, index) => {
form.value.diagnosisList.push({
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
ybNo: item.ybNo,
medTypeCode: item.medTypeCode,
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
diagnosisTime: new Date().toLocaleString('zh-CN')
});
});
}
emits('diagnosisSave', false);
}
});
=======
getEncounterDiagnosis(props.patientInfo.encounterId)
.then((res) => {
if (res.code == 200) {
@@ -362,7 +285,6 @@ function getList() {
}
});
});
>>>>>>> v1.3
getTree();
}
@@ -487,22 +409,10 @@ function getTree() {
function handleAddDiagnosis() {
proxy.$refs.formRef.validate((valid) => {
if (valid) {
<<<<<<< HEAD
if (!allowAdd.value) {
proxy.$modal.msgWarning('请先填写病历');
return;
}
// 计算现有最大排序号
const maxSortNo = form.value.diagnosisList.length > 0
? Math.max(...form.value.diagnosisList.map(item => item.diagSrtNo || 0))
: 0;
=======
// if (!allowAdd.value) {
// proxy.$modal.msgWarning('请先填写病历');
// return;
// }
>>>>>>> v1.3
form.value.diagnosisList.push({
showPopover: false,
name: undefined,
@@ -717,14 +627,10 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
.el-checkbox.is-bordered.el-checkbox--small {
background-color: #ffffff;
}
<<<<<<< HEAD
=======
.tree-with-scrollbar {
max-height: 650px;
overflow-y: auto;
}
>>>>>>> v1.3
.custom-tree-node {
display: flex;
align-items: center;

View File

@@ -1,25 +1,5 @@
<template>
<div>
<<<<<<< HEAD
<el-scrollbar height="200px">
<el-table
ref="emrTemplateRef"
:data="emrTemplate"
row-key="id"
highlight-current-row
@cell-click="clickRow"
>
<el-table-column label="模板名称" align="center" prop="templateName" />
<!-- <el-table-column label="使用范围" align="center" prop="useScopeCode" /> -->
<el-table-column label="操作" align="center" width="100">
<template #default="scope">
<el-button link type="primary" @click.stop="handelDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-scrollbar>
=======
<el-table
ref="emrTemplateRef"
:data="emrTemplate"
@@ -36,7 +16,6 @@
</template>
</el-table-column>
</el-table>
>>>>>>> v1.3
<pagination
v-show="total > 0"
:total="total"
@@ -67,11 +46,7 @@ const props = defineProps({
required: true,
},
});
<<<<<<< HEAD
getList();
=======
getList();
>>>>>>> v1.3
function getList() {
queryParams.value.useScopeCode = 1;
getEmrTemplateList(queryParams.value).then((res) => {

View File

@@ -276,10 +276,6 @@ function getRowDisabled(row) {
* 新增处方按钮操作
*/
function handleAddPrescription() {
<<<<<<< HEAD
console.log('新增处方按钮操作 - 打开新增处方弹窗');
=======
>>>>>>> v1.3
title.value = '新增处方';
openPrescriptionDialog();
}

View File

@@ -1,13 +1,6 @@
/*
* @Author: sjjh
* @Date: 2025-09-20 17:02:37
<<<<<<< HEAD
* @Description:
*/
import request from '@/utils/request'
// ====== 文书记录
=======
* @Description:
*/
import request from '@/utils/request';
@@ -21,17 +14,11 @@ export function saveOrUpdateRecord(data) {
data,
});
}
>>>>>>> v1.3
// 新增记录
export function addRecord(data) {
return request({
url: '/document/record/addRecord',
method: 'post',
<<<<<<< HEAD
data
})
}
=======
data,
});
}
@@ -69,31 +56,21 @@ export function deleteTemplate(id) {
});
}
>>>>>>> v1.3
// 根据患者ID或就诊ID获取文书记录列表,只针对不需返回患者具体信息的列表,体温单除外,单独处理
export function getRecordByEncounterIdList(params) {
return request({
url: '/document/record/getRecordByEncounterIdList',
method: 'get',
<<<<<<< HEAD
params
})
=======
params,
});
>>>>>>> v1.3
}
// 初始化文书定义
export function init() {
return request({
url: '/document/record/init',
method: 'get',
<<<<<<< HEAD
})
=======
});
>>>>>>> v1.3
}
// ====== 文书模板
@@ -102,40 +79,22 @@ export function addTemplate(data) {
return request({
url: '/document/template/add',
method: 'post',
<<<<<<< HEAD
data
})
=======
data,
});
>>>>>>> v1.3
}
//
export function getListByDefinitionId(definitionId) {
return request({
url: '/document/template/getListByDefinitionId',
method: 'get',
<<<<<<< HEAD
params: {definitionId}
})
=======
params: { definitionId },
});
>>>>>>> v1.3
}
// 更新模板
export function updateTemplate(data) {
return request({
url: '/document/template/update',
method: 'put',
<<<<<<< HEAD
data
})
}
=======
data,
});
}
>>>>>>> v1.3

View File

@@ -7,13 +7,6 @@
</template>
</el-input>
</div>
<<<<<<< HEAD
<el-scrollbar class="emr-history-scrollbar-container" style="width: 100%">
<div v-for="item in historyData" :key="item.id" class="scrollbar-item">
<el-tooltip effect="dark" :content="`${item.name}(${item.recordTime})`" placement="bottom">
<el-text class="w-150px mb-2" truncated @click="handleNodeClick(item)">
{{ item.name }}({{ item.recordTime }})
=======
<el-scrollbar
class="emr-history-scrollbar-container"
style="width: 100%; height: calc(100vh - 300px)"
@@ -37,7 +30,6 @@
>
<Delete />
</el-icon>
>>>>>>> v1.3
</el-text>
</el-tooltip>
</div>
@@ -46,13 +38,8 @@
</template>
<script setup>
<<<<<<< HEAD
import { ref, reactive, defineEmits, unref } from 'vue';
import { getRecordByEncounterIdList } from '../api';
=======
import { ref, reactive, defineEmits, unref, nextTick } from 'vue';
import { getRecordByEncounterIdList, deleteRecord } from '../api';
>>>>>>> v1.3
import { ElTree } from 'element-plus';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { patientInfo } from '../../store/patient.js';
@@ -62,13 +49,10 @@ const props = defineProps({
type: String,
default: '',
},
<<<<<<< HEAD
=======
selectedRecordId: {
type: String,
default: '',
},
>>>>>>> v1.3
});
const definitionId = defineModel('definitionId', {
type: String,
@@ -97,20 +81,13 @@ const queryList = async () => {
historyData.value = [];
}
} catch (error) {
<<<<<<< HEAD
// ElMessage.error('获取模板树失败');
=======
// ElMessage.error(' 获取模板树失败 ');
>>>>>>> v1.3
historyData.value = [];
}
};
const handleNodeClick = (data) => {
emits('historyClick', data);
};
<<<<<<< HEAD
const currentSelectTemplate = ref({});
=======
// 删除历史记录
const handleDelete = async (item) => {
try {
@@ -128,7 +105,6 @@ const handleDelete = async (item) => {
}
};
>>>>>>> v1.3
defineExpose({ queryList });
</script>
@@ -152,8 +128,6 @@ defineExpose({ queryList });
& + .scrollbar-item {
margin-top: 8px;
}
<<<<<<< HEAD
=======
transition: all 0.3s ease;
}
.selected-history-item {
@@ -164,7 +138,6 @@ defineExpose({ queryList });
color: #d9d9d9;
cursor: not-allowed;
opacity: 0.6;
>>>>>>> v1.3
}
}
}

View File

@@ -9,19 +9,6 @@
</div> -->
<el-scrollbar class="emr-template-scrollbar-container" style="width: 100%">
<div v-for="item in templateData" :key="item.id" class="scrollbar-item">
<<<<<<< HEAD
<el-tooltip
effect="dark"
:content="`${item.name}`"
placement="bottom"
>
<el-text class="2" truncated @click="handleNodeClick(item)">
<div class="template-item">{{ item.name }}
<el-space>
<el-icon><Edit @click="handleEdit(item)" /></el-icon>
</el-space></div>
=======
<el-tooltip effect="dark" :content="`${item.name}`" placement="bottom">
<el-text class="2" truncated @click="handleNodeClick(item)">
<div class="template-item">
@@ -31,7 +18,6 @@
<el-icon><Delete @click="handleDelete(item)" /></el-icon>
</el-space>
</div>
>>>>>>> v1.3
</el-text>
</el-tooltip>
</div>
@@ -41,19 +27,11 @@
<script setup>
import { ref, reactive, defineEmits, unref } from 'vue';
<<<<<<< HEAD
import { getListByDefinitionId } from '../api';
import { ElTree } from 'element-plus';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { patientInfo } from '../../store/patient.js';
const emits = defineEmits(['templateClick','edit']);
=======
import { getListByDefinitionId, deleteTemplate } from '../api';
import { ElTree } from 'element-plus';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { patientInfo } from '../../store/patient.js';
const emits = defineEmits(['templateClick', 'edit']);
>>>>>>> v1.3
const props = defineProps({
definitionId: {
type: String,
@@ -73,17 +51,6 @@ const queryParams = ref({
isPage: 0,
});
const templateData = ref([]);
<<<<<<< HEAD
const queryList = async () => {
try {
if ( unref(definitionId)&&unref(definitionId) !== '') {
const res = await getListByDefinitionId(unref(definitionId));
templateData.value = res.data || [];
}else{
templateData.value = [];
}
=======
// 删除模板
const handleDelete = async (item) => {
try {
@@ -102,7 +69,6 @@ const queryList = async () => {
} else {
templateData.value = [];
}
>>>>>>> v1.3
} catch (error) {
ElMessage.error('获取模板失败');
templateData.value = [];
@@ -120,38 +86,6 @@ defineExpose({ queryList });
<style lang="scss" scoped>
.emr-template-container {
<<<<<<< HEAD
height: 100%;
// padding: 8px;
.emr-template-scrollbar-container{
padding: 8px;
height: 100%;
.scrollbar-item {
height: 40px;
line-height: 40px;
border-radius: 4px;
cursor: pointer;
background: var(--el-color-primary-light-9);
& + .scrollbar-item {
margin-top: 8px;
}
.el-text{
width: calc(100% - 0px);
display: flex;
justify-content: space-between;
padding: 0 8px;
}
.template-item{
width: 100%;
display: flex;
justify-content: space-between;
}
}
}
}
=======
height: 100%;
// padding: 8px;
@@ -181,5 +115,4 @@ defineExpose({ queryList });
}
}
}
>>>>>>> v1.3
</style>

View File

@@ -1,11 +1,3 @@
<<<<<<< HEAD
<!--
* @Author: sjjh
* @Date: 2025-09-18 15:41:10
* @Description: 门诊病历组件
-->
=======
>>>>>>> v1.3
<template>
<div class="emr-use-container">
<div
@@ -51,26 +43,13 @@
<!-- <el-button type="primary" @click="newEmr">新建</el-button> -->
<el-button type="primary" @click="saveAsModel">存为模版</el-button>
<el-button @click="refresh">刷新</el-button>
<<<<<<< HEAD
<el-button type="primary" @click="save">保存</el-button>
<!-- <el-button type="primary" @click="print">打印</el-button> -->
=======
<el-button @click="resetForm">重置</el-button>
<el-button type="primary" @click="save">保存</el-button>
<el-button type="primary" @click="print">打印</el-button>
>>>>>>> v1.3
</el-space>
</div>
<div class="operate-main">
<el-scrollbar class="template-tree-scrollbar">
<<<<<<< HEAD
<component
:is="currentComponent"
ref="emrComponentRef"
:patientInfo="props.patientInfo"
@submitOk="handleSubmitOk"
/>
=======
<div v-loading="loading" class="loading-container">
<component
:is="currentComponent"
@@ -79,7 +58,6 @@
@submitOk="handleSubmitOk"
/>
</div>
>>>>>>> v1.3
</el-scrollbar>
</div>
</div>
@@ -92,10 +70,7 @@
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
<<<<<<< HEAD
=======
:selectedRecordId="selectedHistoryRecordId"
>>>>>>> v1.3
/>
</el-tab-pane>
<el-tab-pane label="模版" name="model">
@@ -119,20 +94,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { getCurrentInstance, nextTick, onBeforeMount, onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { getTreeList } from '@/views/basicmanage/caseTemplates/api';
import { addRecord, addTemplate } from './api';
import { patientInfo } from '../store/patient.js';
import dayjs from 'dayjs';
// 打印工具
// import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
const { proxy } = getCurrentInstance();
const emits = defineEmits(['emrSaved']);
const props = defineProps({
/** 患者信息 doctorStation 传递信息*/
=======
import { nextTick, onMounted, ref, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { getTreeList } from '@/views/basicmanage/caseTemplates/api';
@@ -146,7 +107,6 @@ const { proxy } = getCurrentInstance();
const emits = defineEmits([]);
const props = defineProps({
/** 患者信息 doctorStation 传递信息*/
>>>>>>> v1.3
patientInfo: {
type: Object,
required: true,
@@ -169,10 +129,7 @@ const queryParams = ref({
useRanges: [1, 2], // 0 暂不使用 1 全院 2 科室 3 个人
organizationId: userStore.orgId,
});
<<<<<<< HEAD
=======
const loading = ref(false); // 数据加载状态
>>>>>>> v1.3
const currentSelectTemplate = ref({
id: '',
@@ -182,10 +139,7 @@ const emrComponentRef = ref(null);
const quicklyactiveName = ref('history');
const leftShow = ref(true);
const rightShow = ref(true);
<<<<<<< HEAD
=======
const templateTree = ref(null);
>>>>>>> v1.3
// 树配置(模板树)
const defaultProps = {
@@ -198,12 +152,9 @@ const queryTemplateTree = async () => {
try {
const res = await getTreeList(queryParams.value);
templateData.value = res.data || [];
<<<<<<< HEAD
=======
// 组件挂载后患者信息变化时会自动调用selectDefaultTemplate
// 这里不再重复调用,避免重复操作
>>>>>>> v1.3
} catch (error) {
// ElMessage.error('获取模板树失败');
templateData.value = [];
@@ -223,9 +174,6 @@ const handleNodeClick = (data, node) => {
};
// currentComponent.value = null;
}
<<<<<<< HEAD
historyRef.value?.queryList();
=======
// 确保组件状态更新后再查询历史记录
nextTick(() => {
@@ -240,7 +188,6 @@ const handleNodeClick = (data, node) => {
}, 100);
});
>>>>>>> v1.3
templateRef.value?.queryList();
};
@@ -300,14 +247,6 @@ const handleSubmitOk = async (data) => {
editForm.value.encounterId = patientInfo.value.encounterId;
editForm.value.patientId = patientInfo.value.patientId;
editForm.value.recordTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
<<<<<<< HEAD
await addRecord(editForm.value);
ElMessage.success('病历保存成功');
historyRef.value?.queryList();
templateRef.value?.queryList();
// 通知父组件病历保存成功
emits('emrSaved', true);
=======
// 提交病历
await saveOrUpdateRecord(editForm.value);
ElMessage.success('保存成功');
@@ -320,18 +259,12 @@ const handleSubmitOk = async (data) => {
setTimeout(() => {
loadLatestMedicalRecord();
}, 100);
>>>>>>> v1.3
} catch (error) {
ElMessage.error('提交失败');
console.log(error);
}
} else if (currentOperate.value === 'addTemplate') {
<<<<<<< HEAD
// 新增或者编辑模板
// editTemplateForm.value.id=
=======
// 新增或修改模板
>>>>>>> v1.3
editTemplateForm.value.name =
currentSelectTemplate.value.name + dayjs().format('YYYY/MM/DD HH:mm');
editTemplateForm.value.contextJson = JSON.stringify(data);
@@ -346,26 +279,12 @@ const refresh = () => {
templateRef.value?.queryList();
};
<<<<<<< HEAD
const deleteEmr = async () => {
try {
// 这里应该添加实际的删除逻辑
ElMessage.success('删除成功!');
} catch (error) {
ElMessage.error('删除失败');
}
};
const save = async () => {
try {
=======
const save = async () => {
try {
if (editForm.value && editForm.value.printCount && editForm.value.printCount > 0) {
ElMessage.warning('该病历已打印,不允许修改');
return;
}
>>>>>>> v1.3
currentOperate.value = 'add';
await emrComponentRef.value?.submit();
} catch (error) {
@@ -373,8 +292,6 @@ const save = async () => {
}
};
<<<<<<< HEAD
=======
// 重置表单数据
const resetForm = async () => {
try {
@@ -419,7 +336,6 @@ const resetForm = async () => {
}
};
>>>>>>> v1.3
const historyRef = ref(null);
const handleHistoryClick = (data) => {
newEmr();
@@ -428,8 +344,6 @@ const handleHistoryClick = (data) => {
emrComponentRef.value?.setFormData(JSON.parse(editForm.value.contentJson));
});
};
<<<<<<< HEAD
=======
// 默认选中门诊病历模板
const selectOutpatientMedicalRecordTemplate = async () => {
@@ -532,17 +446,13 @@ const loadLatestMedicalRecord = async () => {
loading.value = false;
}
};
>>>>>>> v1.3
const templateRef = ref(null);
const handleTemplateClick = (data) => {
newEmr();
editForm.value = data;
<<<<<<< HEAD
=======
editForm.value.id = '';
editForm.value.recordTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
>>>>>>> v1.3
nextTick(() => {
emrComponentRef.value?.setFormData(JSON.parse(editForm.value.contextJson));
});
@@ -555,12 +465,6 @@ const templateEdit = (data) => {
const templateEditVisible = ref(false);
// const templateEditSubmitOk = () => {};
<<<<<<< HEAD
// 打印方法实现
const print = async () => {
try {
// 检查是否有选中的病历模板
=======
// 定义病历模板类型与打印模板的映射关系
const templateToPrintTemplateMap = {
// 手术记录相关模板
@@ -593,46 +497,19 @@ const getPrintTemplateByTemplateName = (templateName) => {
// 打印
const print = async () => {
try {
>>>>>>> v1.3
if (!currentSelectTemplate.value || !currentSelectTemplate.value.id) {
ElMessage.warning('请先选择病历模板');
return;
}
<<<<<<< HEAD
=======
// 检查是否已保存
if (!editForm.value.id || editForm.value.id === '') {
ElMessage.warning('请先保存病历后再进行打印');
return;
}
>>>>>>> v1.3
// 获取当前病历组件的表单数据
const formData = emrComponentRef.value?.formData || {};
<<<<<<< HEAD
// 准备打印数据不依赖子组件的getPrintData方法
// const printData = {
// // 使用当前选中的模板信息
// templateInfo: currentSelectTemplate.value,
// // 添加患者信息
// patientInfo: props.patientInfo,
// // 添加打印时间
// printTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
// // 添加基本病历信息
// emrInfo: {
// documentName: currentSelectTemplate.value.name || '住院病历',
// documentId: currentSelectTemplate.value.id || '',
// encounterId: props.patientInfo.encounterId || '',
// patientId: props.patientInfo.patientId || '',
// recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
// },
// // 添加病历表单数据(包含红框内的所有字段)
// formData: formData,
// doctorName: userStore.nickName,
// };
=======
// 获取诊断数据
let diagnosisList = [];
let diagnosisText = '';
@@ -659,7 +536,6 @@ const print = async () => {
const selectedPrintTemplate = getPrintTemplateByTemplateName(templateName);
// 打印数据
>>>>>>> v1.3
const printData = {
// 模板信息
templateName: currentSelectTemplate.value.name || '住院病历',
@@ -683,30 +559,16 @@ const print = async () => {
department: props.patientInfo.department || '',
attendingDoctor: props.patientInfo.attendingDoctor || '',
<<<<<<< HEAD
=======
// 诊断信息
diagnosisList: JSON.stringify(diagnosisList),
diagnosisText: diagnosisText,
>>>>>>> v1.3
// 病历信息
documentName: currentSelectTemplate.value.name || '住院病历',
documentId: currentSelectTemplate.value.id || '',
recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
printTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
<<<<<<< HEAD
// 表单数据 - 需要将嵌套结构展开
...flattenObject(formData),
};
// 执行打印
await simplePrint(PRINT_TEMPLATE.OUTPATIENT_MEDICAL_RECORD, printData);
ElMessage.success('打印成功');
} catch (error) {
console.error('打印失败:', error);
=======
//病历号
busNo: props.patientInfo.busNo || '',
//费用类型
@@ -733,7 +595,6 @@ const print = async () => {
ElMessage.success('打印成功');
} catch (error) {
>>>>>>> v1.3
ElMessage.error('打印失败: ' + (error.message || '未知错误'));
}
};
@@ -767,17 +628,6 @@ const templateEditSubmitOk = () => {
historyRef.value?.queryList();
templateRef.value?.queryList();
};
<<<<<<< HEAD
// onBeforeMount(() => {});
// 刚进页面默认显示门诊病历
const selectDefaultTemplate = () => {
nextTick(() => {
// 查找门诊病历(1.0.0)节点
const findTemplate = (nodes) => {
for (const node of nodes) {
if (node.children && node.children.length > 0) {
const found = findTemplate(node.children);
=======
// 选择默认模板 - 获取门诊病历分类下的第一个模板
const selectDefaultTemplate = () => {
@@ -805,41 +655,14 @@ const selectDefaultTemplate = () => {
// 递归查找子节点
if (node.children && node.children.length > 0) {
const found = findOutpatientRecordCategoryAndFirstTemplate(node.children);
>>>>>>> v1.3
if (found) {
return found;
}
}
<<<<<<< HEAD
// 根据ID查找门诊病历模板
if (node.document && node.document.id === '1963474077201162242') {
return node;
}
=======
>>>>>>> v1.3
}
return null;
};
<<<<<<< HEAD
const defaultTemplate = findTemplate(templateData.value);
if (defaultTemplate) {
// 模拟点击节点
const mockNode = {
isLeaf: true,
};
handleNodeClick(defaultTemplate, mockNode);
}
});
};
onMounted(async () => {
console.log('hospitalizationEmr mounted', userStore);
await queryTemplateTree();
selectDefaultTemplate();
});
defineExpose({ state });
=======
const defaultTemplate = findOutpatientRecordCategoryAndFirstTemplate(templateData.value);
if (defaultTemplate) {
nextTick(() => {
@@ -899,7 +722,6 @@ onMounted(async () => {
});
// defineExpose({ state }); // state未使用
>>>>>>> v1.3
const disNode = () => {
leftShow.value = !leftShow.value;
@@ -1013,14 +835,6 @@ const disNode_R = () => {
}
.operate-main {
<<<<<<< HEAD
height: calc(100vh - 150px);
flex: auto;
}
.operate-main .template-tree-scrollbar {
height: 100%;
overflow-y: auto;
=======
flex: 1;
min-height: 0; /* 允许flex子项高度收缩 */
display: flex;
@@ -1044,7 +858,6 @@ const disNode_R = () => {
.operate-main .template-tree-scrollbar > * {
max-width: 100%;
box-sizing: border-box;
>>>>>>> v1.3
}
}
@@ -1066,13 +879,10 @@ const disNode_R = () => {
transition-duration: 300ms;
}
}
<<<<<<< HEAD
=======
/* 加载状态样式 */
.loading-container {
min-height: 400px;
position: relative;
}
>>>>>>> v1.3
</style>

View File

@@ -19,11 +19,7 @@
<span>{{ item.prescriptionNo }}</span>
</div>
<div style="text-align: center">
<<<<<<< HEAD
<h2>长春大学医院</h2>
=======
<h2>长春市朝阳区中医院医院</h2>
>>>>>>> v1.3
</div>
<div style="text-align: center">
<h3>处方单</h3>

View File

@@ -59,17 +59,6 @@
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unitCode_dictText" />
<el-table-column label="收款金额" align="center" prop="totalPrice" />
<<<<<<< HEAD
<el-table-column label="发放状态" align="center">
<template #default="scope">
<el-tag v-if="scope.row.dispenseStatus != 0" type="danger">
{{ scope.row.dispenseStatus_enumText }}
</el-tag>
<el-tag v-else type="default">{{ scope.row.serviceStatus_enumText }}</el-tag>
</template>
</el-table-column>
=======
>>>>>>> v1.3
<el-table-column label="支付状态" align="center" prop="refundStatus_enumText">
<template #default="scope">
<el-tag

View File

@@ -3,11 +3,7 @@
<div
class="prescription-section"
v-for="(prescription, pIndex) in tcmPrescriptionList"
<<<<<<< HEAD
:key="pIndex"
=======
:key="prescription.id"
>>>>>>> v1.3
>
<div class="section-header">
<div class="title first-prescription">
@@ -22,20 +18,6 @@
<plus />
</el-icon>
<el-icon
<<<<<<< HEAD
class="delete-icon"
title="删除处方单"
@click="handleDeletePrescriptionClick(pIndex)"
:class="{ 'disabled-icon': isPrescriptionDeletable(pIndex) !== true }"
style="font-size: 20px !important; margin-left: 10px; color: #f56c6c"
>
<minus />
</el-icon>
</div>
<div class="summary">
<span class="summary-item">药品数: {{ getPrescriptionMedicineCount(pIndex) }}</span>
<span class="summary-item">总价: ¥ {{ getPrescriptionTotalPrice(pIndex) }}</span>
=======
class="add-icon"
title="删除处方"
@click="deletePrescription(prescription)"
@@ -50,7 +32,6 @@
{{ prescription.prescriptionList ? prescription.prescriptionList.length : '0' }}
</span>
<span class="summary-item">总价: ¥ {{ calculatePrescriptionTotal(pIndex) }}</span>
>>>>>>> v1.3
</div>
</div>
<div>
@@ -93,15 +74,8 @@
:value="item.accountId"
/>
</el-select>
<<<<<<< HEAD
<span class="doctor-station"> 配方名称 </span>
<el-input v-model="formulaName" placeholder=" " style="width: 100px" />
<span class="doctor-station"> 用药途径 </span>
<el-select v-model="methodCode" placeholder="费用性质" style="width: 120px">
=======
<span class="doctor-station"> 用法 </span>
<el-select v-model="prescription.methodCode" placeholder="用法" style="width: 120px">
>>>>>>> v1.3
<el-option
v-for="dict in method_code"
:key="dict.value"
@@ -271,23 +245,6 @@
/>
</template>
</el-select>
<<<<<<< HEAD
<span class="doctor-station"> 脚注: </span>
<el-select
v-model="footNote"
filterable
allow-create
default-first-option
style="width: 120px; margin-right: 20px"
placeholder="">
<el-option
v-for="dict in hjerbal_footnotes"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
=======
<!-- 单次剂量 -->
<el-form-item
label="特殊煎法"
@@ -305,7 +262,6 @@
</template>
</el-select>
</el-form-item>
>>>>>>> v1.3
</div>
<span class="total-amount">
总金额:{{
@@ -474,13 +430,9 @@ import { calculateQuantityByDays, formatNumber } from '@/utils/his';
import Decimal from 'decimal.js';
import tcmdiagnosisDialog from './tcmdiagnosisDialog';
import { Delete, Minus } from '@element-plus/icons-vue';
<<<<<<< HEAD
=======
import { ElMessage } from 'element-plus';
import printUtils, { PRINT_TEMPLATE } from '@/utils/printUtils';
import { advicePrint } from '@/api/public';
>>>>>>> v1.3
const emit = defineEmits(['selectDiagnosis']);
const total = ref(0);
const queryParams = ref({});
@@ -494,10 +446,6 @@ const encounterId = ref('');
const accountId = ref('');
const encounterDiagnosisId = ref('');
<<<<<<< HEAD
const tcmPrescriptionList = ref([
{
=======
let prescriptionIdCounter = 1;
const generatePrescriptionId = () => {
return `prescription_${Date.now()}_${prescriptionIdCounter++}`;
@@ -506,7 +454,6 @@ const generatePrescriptionId = () => {
const tcmPrescriptionList = ref([
{
id: generatePrescriptionId(),
>>>>>>> v1.3
prescriptionList: [],
conditionDefinitionId: '',
accountId: '',
@@ -526,35 +473,9 @@ const tcmPrescriptionList = ref([
const unitCodeList = ref([]);
const adviceTableRef = ref([]);
const organization = ref([]);
<<<<<<< HEAD
const conditionDefinitionId = ref('');
const diagnosisName = ref('');
const diagnosisInfo = ref({});
const rateCode = ref('');
const footNote = ref('');
const decoctionMethod = ref('');
const chineseHerbsDoseQuantity = ref('');
const dispensePerDuration = ref('');
const formulaName = ref('');
const sufferingFlag = ref(false);
const methodCode = ref('');
const loading = ref(false);
const rowRules = ref({
conditionDefinitionId: [{ required: true, message: '请选择诊断', trigger: 'change' }],
minUnitQuantity: [{ required: true, message: '请输入单次剂量', trigger: 'change' }],
doseQuantity: [{ required: true, message: '请输入单次剂量单位', trigger: 'change' }],
quantity: [{ required: true, message: '请输入数量', trigger: 'change' }],
dispensePerDuration: [{ required: true, message: '请输入用药天数', trigger: 'change' }],
formulaName: [{ required: true, message: '请输入配方名称', trigger: 'change' }],
executeNum: [{ required: true, message: '请输入执行次数', trigger: 'change' }],
rateCode: [{ required: true, message: '请选择频次', trigger: 'change' }],
methodCode: [{ required: true, message: '请选择给药途径', trigger: 'change' }],
orgId: [{ required: true, message: '请选择执行科室', trigger: 'change' }],
=======
const loading = ref(false);
const rowRules = ref({
minUnitQuantity: [{ required: true, message: '请输入单次剂量', trigger: 'change' }],
>>>>>>> v1.3
});
const unitMap = ref({
dose: 'dose',
@@ -584,39 +505,6 @@ const inputRefs = ref({}); // 存储输入框实例
const requiredProps = ref([]); // 存储必填项 prop 顺序
const totalAmount = ref(0);
const tcmDianosis = ref();
<<<<<<< HEAD
const { method_code, unit_code, rate_code, method_of_decocting_medicine,hjerbal_footnotes,distribution_category_code } = proxy.useDict(
'method_code',
'unit_code',
'rate_code',
'method_of_decocting_medicine',
'hjerbal_footnotes',
'distribution_category_code'
);
const adviceTypeList = ref([
{
label: '西药',
value: 1,
},
{
label: '中成药',
value: 2,
},
{
label: '耗材',
value: 3,
},
{
label: '诊疗',
value: 4,
},
{
label: '全部',
value: '',
},
]);
=======
const { method_code, unit_code, rate_code, distribution_category_code, dosage_instruction } =
proxy.useDict(
'method_code',
@@ -626,7 +514,6 @@ const { method_code, unit_code, rate_code, distribution_category_code, dosage_in
'dosage_instruction'
);
>>>>>>> v1.3
onMounted(() => {
document.addEventListener('keydown', escKeyListener);
});
@@ -652,64 +539,6 @@ function getList() {
});
}
<<<<<<< HEAD
function getListInfo(addNewRow) {
// 确保isAdding变量存在
if (typeof isAdding !== 'undefined') {
isAdding.value = false;
}
// 确保有患者信息
if (!props.patientInfo || !props.patientInfo.encounterId) {
console.error('患者信息不完整');
return;
}
getTcmAdviceList({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res && res.data && Array.isArray(res.data)) {
// 处理返回的数据
if (res.data.length > 0) {
// 如果有数据,清空当前列表并重新添加
tcmPrescriptionList.value = [];
res.data.forEach((item) => {
try {
// 解析contentJson获取完整的医嘱数据
const contentData = item.contentJson ? JSON.parse(item.contentJson) : {};
// 创建一个新的处方对象
const newPrescription = {
...item,
...contentData,
// 确保关键显示字段存在
adviceName: contentData.adviceName || item.adviceName || '',
quantity: contentData.quantity || item.quantity || '',
totalPrice: contentData.totalPrice || item.totalPrice || '',
diagnosisName: contentData.diagnosisName || item.diagnosisName || '',
positionName: contentData.positionName || item.positionName || '',
doseUnitCode_dictText: contentData.doseUnitCode_dictText || item.doseUnitCode_dictText || '',
chineseHerbsDoseQuantity: contentData.chineseHerbsDoseQuantity || item.chineseHerbsDoseQuantity || '',
prescriptionList: [contentData]
};
// 添加到处方列表
tcmPrescriptionList.value.push(newPrescription);
} catch (error) {
console.error('解析医嘱数据失败:', error, '数据项:', item);
}
});
}
// 重新计算总金额
handleTotalAmount();
if (props.activeTab == 'prescription' && addNewRow) {
handleAddMedicine();
}
} else {
console.error('获取医嘱列表失败或数据格式错误:', res);
// 保持当前列表不变,不要清空
=======
async function getListInfo(addNewRow) {
// 重置所有处方的添加状态
tcmPrescriptionList.value.forEach((prescription) => {
@@ -785,28 +614,14 @@ async function getListInfo(addNewRow) {
tcmPrescriptionList.value.accountId = contractList.value[0].accountId;
if (props.activeTab == 'prescription' && addNewRow) {
handleAddMedicine(0);
>>>>>>> v1.3
}
}).catch(error => {
console.error('获取医嘱列表异常:', error);
// 保持当前列表不变,不要清空
});
<<<<<<< HEAD
tcmDiagnosisList.value = getFromDiagnosis(props.patientInfo.encounterId);
getContract({ encounterId: props.patientInfo.encounterId }).then((res) => {
contractList.value = res?.data || [];
}).catch(error => {
console.error('获取合同信息失败:', error);
});
accountId.value = props.patientInfo.accountId || '';
=======
tcmDiagnosisList.value = getFromDiagnosis(props.patientInfo.encounterId);
accountId.value = props.patientInfo.accountId;
>>>>>>> v1.3
}
function getDiagnosisInfo() {
@@ -822,11 +637,7 @@ function getDiagnosisInfo() {
});
});
}
<<<<<<< HEAD
// 默认选择第一个诊断
=======
// 默认选择第一个诊断
>>>>>>> v1.3
if (diagnosisList.value.length > 0) {
const firstDiagnosis = diagnosisList.value[0];
tcmPrescriptionList.value.forEach((prescription) => {
@@ -1156,18 +967,8 @@ function handleDelete(pIndex) {
prescription.expandOrder = [];
prescription.isAdding = false;
adviceQueryParams.value.adviceType = undefined;
<<<<<<< HEAD
// 删除行会出现组号混乱的情况,所以这里重新更新标记
const allPrescriptions = tcmPrescriptionList.value.flatMap(p => p.prescriptionList);
groupMarkers.value = getGroupMarkers(allPrescriptions);
}
=======
}
>>>>>>> v1.3
function handleNumberClick(item, index, pIndex) {
const prescription = tcmPrescriptionList.value[pIndex];
prescription.prescriptionList[index].unitPrice = item.price;
@@ -1247,117 +1048,6 @@ function handleSave(pIndex) {
}
// 单行处方保存
<<<<<<< HEAD
function handleSaveSign(row, index) {
try {
// 直接执行保存逻辑,不再进行表单验证
row.isEdit = false;
isAdding.value = false;
expandOrder.value = [];
// 确保必要的字段有值
if (props.patientInfo) {
row.patientId = props.patientInfo.patientId;
row.encounterId = props.patientInfo.encounterId;
}
row.accountId = accountId.value || '';
row.quantity = row.minUnitQuantity || 1; // 确保数量有值
row.conditionId = conditionId.value || '';
row.conditionDefinitionId = conditionDefinitionId.value || '';
row.encounterDiagnosisId = encounterDiagnosisId.value || '';
row.diagnosisName = diagnosisName.value || '';
// 计算单价
if (row.unitCodeList && row.unitCode) {
const unitItem = row.unitCodeList.find((item) => item.value === row.unitCode);
if (unitItem?.type !== 'unit' && row.unitPrice) {
row.unitPrice = new Decimal(row.unitPrice).div(row.partPercent || 1).toFixed(2);
}
}
// 计算总金额
if (row.minUnitQuantity && row.unitPrice) {
row.totalPrice = new Decimal(row.minUnitQuantity).mul(row.unitPrice).toFixed(2);
}
// 确保显示所需的字段都有值
row.adviceName = row.adviceName || '未命名药品';
row.positionName = row.positionName || '默认药房';
// 创建要保存的数据对象,避免循环引用
const saveData = {
...row,
// 排除可能导致循环引用的复杂对象
unitCodeList: undefined,
stockList: undefined,
contentJson: undefined
};
// 序列化数据用于存储
saveData.contentJson = JSON.stringify(saveData);
// 只保存当前行的数据,而不是整个列表
savePrescription({ adviceSaveList: [saveData] }).then((res) => {
if (res && res.code === 200) {
proxy.$modal.msgSuccess('保存成功');
// 此处错误调用getListInfo导致医嘱信息被覆盖从而不显示。
// getListInfo(true);
nextId.value = 1;
} else {
proxy.$modal.msgError('保存失败,请重试');
console.error('保存失败响应:', res);
}
}).catch(error => {
console.error('保存处方失败:', error);
proxy.$modal.msgError('保存失败,请检查网络或联系管理员');
});
} catch (error) {
console.error('处理保存时出错:', error);
proxy.$modal.msgError('操作异常,请重试');
}
}
function handleSaveBatch() {
// 收集所有需要保存的处方项目
let saveList = [];
// 遍历所有处方
for (const prescription of tcmPrescriptionList.value) {
if (prescription.prescriptionList) {
// 检查处方是否有必填的付数
if (!prescription.chineseHerbsDoseQuantity || prescription.chineseHerbsDoseQuantity == 0) {
proxy.$modal.msgWarning('请输入付数');
return;
}
// 收集该处方下需要保存的项目
const itemsToSave = prescription.prescriptionList
.filter((item) => item.statusEnum == 1)
.map((item, index) => {
return {
...item,
accountId: accountId.value,
conditionId: prescription.conditionId,
encounterDiagnosisId: prescription.encounterDiagnosisId,
conditionDefinitionId: prescription.conditionDefinitionId,
encounterId: props.patientInfo.encounterId,
patientId: props.patientInfo.patientId,
requestId: item.requestId,
groupId: item.groupId ? item.groupId : timestamp.toString(),
chineseHerbsDoseQuantity: prescription.chineseHerbsDoseQuantity,
dbOpType: item.requestId ? '2' : '1',
};
});
// 将项目添加到保存列表
saveList = saveList.concat(itemsToSave);
}
}
// 检查是否有可保存的项目
=======
function handleSaveSign(row, index, pIndex) {
const prescription = tcmPrescriptionList.value[pIndex];
const formRefName = 'formRef' + pIndex + '-' + index;
@@ -1408,15 +1098,10 @@ function handleSaveBatch(pIndex) {
dbOpType: item.requestId ? '2' : '1',
};
});
>>>>>>> v1.3
if (saveList.length == 0) {
proxy.$modal.msgWarning('当前没有可保存医嘱');
return;
}
<<<<<<< HEAD
// 保存处方
=======
if (
prescription.chineseHerbsDoseQuantity == undefined ||
prescription.chineseHerbsDoseQuantity == 0
@@ -1424,22 +1109,11 @@ function handleSaveBatch(pIndex) {
proxy.$modal.msgWarning('请输入付数');
return;
}
>>>>>>> v1.3
saveTcmAdvice({ adviceSaveList: saveList }).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('保存成功');
getListInfo(true);
<<<<<<< HEAD
// 重置所有处方的nextId
tcmPrescriptionList.value.forEach(prescription => {
if (prescription.nextId) {
prescription.nextId = 1;
}
});
=======
prescription.nextId = 1;
>>>>>>> v1.3
}
});
}
@@ -1607,21 +1281,6 @@ function validateGroups(saveList) {
return true;
}
<<<<<<< HEAD
=======
async function handlePrint(pIndex) {
const prescription = tcmPrescriptionList.value[pIndex];
const selectedRows = prescription.prescriptionList.filter((item) => item.check);
@@ -1683,7 +1342,6 @@ async function handlePrint(pIndex) {
ElMessage.error('中药处方打印失败: ' + error.message);
}
}
>>>>>>> v1.3
defineExpose({ getListInfo, getDiagnosisInfo });
</script>
@@ -1799,29 +1457,4 @@ defineExpose({ getListInfo, getDiagnosisInfo });
.add-icon:hover {
background-color: #ecf5ff;
}
<<<<<<< HEAD
.delete-icon {
cursor: pointer;
border-radius: 50%;
padding: 4px;
transition: all 0.3s ease;
}
.delete-icon:hover {
background-color: #fef0f0;
}
.delete-icon.disabled-icon {
cursor: not-allowed;
color: #c0c4cc !important;
opacity: 0.6;
}
.delete-icon.disabled-icon:hover {
background-color: transparent;
}
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -15,11 +15,6 @@
<el-button icon="Search" @click="getPatientList" />
</template>
</el-input>
<<<<<<< HEAD
<el-date-picker v-model="registerTime" @change="handleTimeChange" type="daterange"
style="width: 100%; margin-bottom: 10px" :clearable="false" placeholder="挂号时间" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" />
=======
<el-date-picker
v-model="registerTime"
@change="handleTimeChange"
@@ -30,7 +25,6 @@
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
>>>>>>> v1.3
<el-scrollbar height="700px">
<div v-for="(item, index) in patientList" :class="item.active ? 'patient-card actived' : 'patient-card'"
:key="item.id" @click="handleCardClick(item, index)">
@@ -87,14 +81,6 @@
{{
Object.keys(patientInfo).length !== 0
? patientInfo.patientName +
<<<<<<< HEAD
' / ' +
patientInfo.age +
' / ' +
patientInfo.genderEnum_enumText +
' / ' +
patientInfo.contractName
=======
' / ' +
patientInfo.age +
' / ' +
@@ -105,29 +91,16 @@
patientInfo.phone +
'/' +
patientInfo.busNo
>>>>>>> v1.3
: '-'
}}
</el-descriptions-item>
<el-descriptions-item label="挂号时间:" width="300">
{{ Object.keys(patientInfo).length !== 0 ? formatDate(patientInfo.registerTime) : '-' }}
</el-descriptions-item>
<<<<<<< HEAD
<el-descriptions-item label="医生:" width="150">{{
userStore.name
}}</el-descriptions-item>
<el-descriptions-item label="" width="350">
<!-- 初诊 / 复诊 按钮 -->
<el-radio v-model="visitType" label="FIRST" :disabled="visitTypeDisabled">初诊</el-radio>
<el-radio v-model="visitType" label="FOLLOW_UP" :disabled="visitTypeDisabled">复诊</el-radio>
<!-- 原有按钮 -->
=======
<el-descriptions-item label="医生:" width="250">
{{ userStore.nickName }}
</el-descriptions-item>
<el-descriptions-item label="" width="300">
>>>>>>> v1.3
<el-button type="primary" plain @click.stop="handleFinish(patientInfo.encounterId)">
完诊
</el-button>
@@ -140,31 +113,11 @@
<el-button type="primary" plain @click.stop="getEnPrescription(patientInfo.encounterId)">
处方单
</el-button>
<<<<<<< HEAD
<el-button type="primary" plain @click.stop="openDialog = true">
办理住院
</el-button>
<el-button type="primary" plain @click.stop="handleCancelEncounter">
取消接诊
</el-button>
=======
<el-button type="primary" plain @click.stop="onHospitalization"> 办理住院 </el-button>
>>>>>>> v1.3
</el-descriptions-item>
</el-descriptions>
</div>
<div style="padding: 10px">
<<<<<<< HEAD
<el-tabs type="card" style="width: 100%; height: 100%" v-loading="loading" v-model="activeTab"
@tab-change="handleClick(activeTab)">
<el-tab-pane label="病历" name="emr">
<Emr :patientInfo="patientInfo" ref="emrRef" @save="
(value) => {
saveStatus = value;
}
" :visitType="visitType" :firstVisitDate="firstVisitDate" />
</el-tab-pane>
=======
<el-tabs
type="card"
style="width: 100%; height: 100%"
@@ -190,7 +143,6 @@
"
/>
</el-tab-pane> -->
>>>>>>> v1.3
<el-tab-pane label="诊断" name="diagnosis">
<Diagnosis :patientInfo="patientInfo" ref="diagnosisRef" @diagnosisSave="
(value) => {
@@ -199,16 +151,12 @@
" />
</el-tab-pane>
<el-tab-pane label="医嘱" name="prescription">
<<<<<<< HEAD
<prescriptionlist :patientInfo="patientInfo" ref="prescriptionRef" :activeTab="activeTab" />
=======
<prescriptionlist
:patientInfo="patientInfo"
ref="prescriptionRef"
:activeTab="activeTab"
:outpatientEmrSaved="outpatientEmrSaved"
/>
>>>>>>> v1.3
</el-tab-pane>
<el-tab-pane label="中医" name="tcm">
<tcmAdvice :patientInfo="patientInfo" ref="tcmRef" />
@@ -226,14 +174,6 @@
<el-drawer v-model="drawer" title="患者队列" direction="ltr" @open="handleOpen">
<PatientList ref="patientDrawerRef" @toCurrent="handleReceive" />
</el-drawer>
<<<<<<< HEAD
<RefundListDialog :open="openRefundListDialog" :encounterId="currentEncounterId"
@close="openRefundListDialog = false" />
<HospitalizationDialog :open="openDialog" :patientInfo="patientInfo" :encounterId="currentEncounterId"
@close="openDialog = false" />
<PrescriptionInfo :open="openPrescriptionDialog" :precriptionInfo="prescriptionInfo"
@close="openPrescriptionDialog = false" />
=======
<RefundListDialog
:open="openRefundListDialog"
:encounterId="currentEncounterId"
@@ -252,7 +192,6 @@
:precriptionInfo="prescriptionInfo"
@close="openPrescriptionDialog = false"
/>
>>>>>>> v1.3
</div>
</template>
<script setup>
@@ -263,13 +202,8 @@ import {
leaveEncounter,
completeEncounter,
getEnPrescriptionInfo,
<<<<<<< HEAD
cancelEncounter,
getEmrHistoryList
=======
isHospitalization,
getEncounterDiagnosis,
>>>>>>> v1.3
} from './components/api.js';
import prescriptionlist from './components/prescription/prescriptionlist.vue';
import RefundListDialog from './components/prescription/refundListDialog.vue';
@@ -482,67 +416,6 @@ function handleClick(tab) {
// 查看本次就诊处方单从医嘱Tab页获取已开立的处方单信息
function getEnPrescription(encounterId) {
<<<<<<< HEAD
// 检查是否有选中的患者
if (!patientInfo.value || !patientInfo.value.encounterId) {
proxy.$modal.msgWarning('请先选择患者');
return;
}
// 检查是否在医嘱Tab页如果不在则切换到医嘱Tab页
if (activeTab.value !== 'prescription') {
activeTab.value = 'prescription';
// 等待Tab切换完成后再获取数据
nextTick(() => {
// 确保数据已加载
if (prescriptionRef.value) {
// 先刷新数据,确保获取最新的处方单信息
if (prescriptionRef.value.getListInfo) {
prescriptionRef.value.getListInfo(false);
}
// 等待数据加载完成后再获取处方单信息
setTimeout(() => {
if (prescriptionRef.value && prescriptionRef.value.getSignedPrescriptionInfo) {
const signedPrescriptions = prescriptionRef.value.getSignedPrescriptionInfo();
if (signedPrescriptions && signedPrescriptions.length > 0) {
prescriptionInfo.value = signedPrescriptions;
openPrescriptionDialog.value = true;
} else {
proxy.$modal.msgWarning('当前患者没有已签发的处方单');
}
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
}, 300);
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
});
} else {
// 如果已经在医嘱Tab页先刷新数据再获取
if (prescriptionRef.value) {
if (prescriptionRef.value.getListInfo) {
prescriptionRef.value.getListInfo(false);
}
// 等待数据加载完成后再获取处方单信息
setTimeout(() => {
if (prescriptionRef.value && prescriptionRef.value.getSignedPrescriptionInfo) {
const signedPrescriptions = prescriptionRef.value.getSignedPrescriptionInfo();
if (signedPrescriptions && signedPrescriptions.length > 0) {
prescriptionInfo.value = signedPrescriptions;
openPrescriptionDialog.value = true;
} else {
proxy.$modal.msgWarning('当前患者没有已签发的处方单');
}
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
}, 300);
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
}
=======
getEnPrescriptionInfo({ encounterId: encounterId }).then((res) => {
console.log('处方单 res', res);
let dataArr = res.data.records || [];
@@ -556,7 +429,6 @@ function getEnPrescription(encounterId) {
prescriptionInfo.value = res.data.records;
openPrescriptionDialog.value = true;
});
>>>>>>> v1.3
}
function handleRefund(encounterId) {
@@ -575,35 +447,6 @@ function handleCardClick(item, index) {
patient.active = patient.encounterId === item.encounterId;
});
patientInfo.value = item;
<<<<<<< HEAD
// 优先使用数据库中保存的初复诊值
if (item.visitType) {
visitType.value = item.visitType;
// 已完诊的记录禁用修改
visitTypeDisabled.value = item.statusEnum !== 2;
// 如果有初诊日期也从数据库获取
// if (item.firstVisitDate) {
// firstVisitDate.value = item.firstVisitDate;
// }
} else {
// 对于没有初复诊记录的患者,才使用原有的判断逻辑
checkPatientHistory(item);
}
activeTab.value = 'emr';
nextTick(() => {
// 确保所有组件引用都已初始化
if (prescriptionRef.value) prescriptionRef.value.getListInfo();
if (tcmRef.value) tcmRef.value.getListInfo();
if (diagnosisRef.value) diagnosisRef.value.getList();
if (eprescriptionRef.value) eprescriptionRef.value.getList();
if (emrRef.value) {
emrRef.value.getDetail(item.encounterId);
} else {
console.error('emr组件未正确初始化');
proxy.$modal.msgError('病历组件加载失败,请刷新页面重试');
}
=======
// 将患者信息保存到store中供hospitalizationEmr组件使用
updatePatientInfo(item);
activeTab.value = 'hospitalizationEmr';
@@ -613,7 +456,6 @@ function handleCardClick(item, index) {
diagnosisRef.value.getList();
eprescriptionRef.value.getList();
// emrRef.value.getDetail(item.encounterId);
>>>>>>> v1.3
setTimeout(() => {
loading.value = false;
}, 200);
@@ -665,32 +507,6 @@ function handleEmrSaved(isSaved) {
function openDrawer() {
drawer.value = true;
}
<<<<<<< HEAD
function handleCancelEncounter() {
proxy.$modal.confirm('您确定要取消病人本次的就诊记录吗?', '提示信息', {
confirmButtonText: '是(Y)',
cancelButtonText: '否(N)',
type: 'warning'
}).then(() => {
//调用取消接诊API,添加skipGlobalError配置跳过全局错误提示
cancelEncounter(patientInfo.value.encounterId, { skipErrorMsg: true }).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('取消接诊成功');
patientInfo.value = {};
getPatientList();
}
}).catch((error) => {
proxy.$modal.confirm('该病人本次就诊已经有业务产生,不能取消接诊!', '提示信息', {
confirmButtonText: '是(Y)',
type: 'warning'
});
});
}).catch(() => {
// 用户取消操作
});
}
=======
// 判断是否已经入院登记
const onHospitalization = async () => {
const diagnosisRes = await getEncounterDiagnosis(patientInfo.value.encounterId);
@@ -720,7 +536,6 @@ const onHospitalization = async () => {
});
}
};
>>>>>>> v1.3
</script>
<style lang="scss" scoped>

View File

@@ -15,11 +15,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -1,25 +1,14 @@
import request from '@/utils/request';
// 获取病区下拉选
<<<<<<< HEAD
export function getPractitionerWard (queryParams) {
return request ({
=======
export function getPractitionerWard(queryParams) {
return request({
>>>>>>> v1.3
url: '/app-common/practitioner-ward',
method: 'get',
params: queryParams,
});
}
<<<<<<< HEAD
// 住院汇总发药单左侧
export function getFromSummaryList (queryParams) {
return request ({
url: 'pharmacy-manage/summary-dispense-medicine/from_summary-list',
=======
// 住院汇总发药单左侧,汇总单列表
export function getFromSummaryList(queryParams) {
return request({
@@ -42,20 +31,14 @@ export function getFromSummaryInit(queryParams) {
export function getFromSummaryDetails(queryParams) {
return request({
url: 'nurse-station/medicine-summary/summary-form-detail',
>>>>>>> v1.3
method: 'get',
params: queryParams,
});
}
// 住院汇总发药单右侧
<<<<<<< HEAD
export function getFromDetailList (queryParams) {
return request ({
=======
export function getFromDetailList(queryParams) {
return request({
>>>>>>> v1.3
url: 'pharmacy-manage/summary-dispense-medicine/from-list',
method: 'get',
params: queryParams,
@@ -63,26 +46,16 @@ export function getFromDetailList(queryParams) {
}
// 明细左侧
<<<<<<< HEAD
export function getEncounterList (queryParams) {
return request ({
=======
export function getEncounterList(queryParams) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/encounter-list',
method: 'get',
params: queryParams,
});
}
//明细 右侧
<<<<<<< HEAD
export function getMedicationSummaryDetail (queryParams) {
return request ({
=======
export function getMedicationSummaryDetail(queryParams) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/medication_summary-list',
method: 'get',
params: queryParams,
@@ -93,13 +66,8 @@ export function getMedicationSummaryDetail(queryParams) {
/**
* 获取住院患者列表
*/
<<<<<<< HEAD
export function getPatientList (queryParams) {
return request ({
=======
export function getPatientList(queryParams) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/inpatient',
method: 'get',
params: queryParams,
@@ -109,13 +77,8 @@ export function getPatientList(queryParams) {
/**
* 获取当前登录人管理病区
*/
<<<<<<< HEAD
export function getWardList (queryParams) {
return request ({
=======
export function getWardList(queryParams) {
return request({
>>>>>>> v1.3
url: '/app-common/practitioner-ward',
method: 'get',
params: queryParams,
@@ -125,13 +88,8 @@ export function getWardList(queryParams) {
/**
* 获取当前选中患者全部医嘱
*/
<<<<<<< HEAD
export function getPrescriptionList (queryParams) {
return request ({
=======
export function getPrescriptionList(queryParams) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/inpatient-advice',
method: 'get',
params: queryParams,
@@ -141,13 +99,8 @@ export function getPrescriptionList(queryParams) {
/**
* 执行医嘱
*/
<<<<<<< HEAD
export function adviceExecute (data) {
return request ({
=======
export function adviceExecute(data) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/advice-execute',
method: 'post',
data: data,
@@ -157,13 +110,8 @@ export function adviceExecute(data) {
/**
* 取消执行医嘱
*/
<<<<<<< HEAD
export function adviceCancel (data) {
return request ({
=======
export function adviceCancel(data) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/advice-cancel',
method: 'post',
data: data,
@@ -172,17 +120,10 @@ export function adviceCancel(data) {
/**
* 明细发药
<<<<<<< HEAD
*
*/
export function totalSendDrug (data) {
return request ({
=======
*
*/
export function totalSendDrug(data) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/summary-dispense-medicine',
method: 'put',
data: data,
@@ -191,20 +132,13 @@ export function totalSendDrug(data) {
/**
* 明细退药
*/
<<<<<<< HEAD
export function totalReturnDrug (data) {
return request ({
=======
export function totalReturnDrug(data) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/medicine-return',
method: 'put',
data: data,
});
}
<<<<<<< HEAD
=======
// -----------------------------------门诊发药接口------------------------------------------------------------
export function listPatient(query) {
@@ -363,4 +297,3 @@ export function init() {
// method: 'get',
// })
// }
>>>>>>> v1.3

View File

@@ -1,186 +1,4 @@
<template>
<<<<<<< HEAD
<div class="app-container">
<el-row :gutter="20" style="margin-bottom: 20px">
<el-col :span="4" :xs="24">
<el-button
:type="selectType === 'total' ? 'primary' : 'default'"
@click="handleSelectType('total')"
>汇总</el-button
>
<el-button
:type="selectType === 'drug' ? 'primary' : 'default'"
@click="handleSelectType('drug')"
>发药</el-button
>
</el-col>
<!-- <el-col :span="18" :xs="24">
<el-form ref="queryParams" label-width="100px" :model="queryParams" :inline="true">
<el-form-item label="窗口" prop="windowDataText" label-width="120px">
<el-select
v-model="queryParams.windowDataText"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="item in windowData"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="摆药单" prop="medicationListText" label-width="120px">
<el-select
v-model="queryParams.medicationListText"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="item in medicationList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="范围" prop="time" label-width="100px">
<el-radio-group v-model="queryParams.timeRange">
<el-radio v-for="(item, index) in timeRangeList" :key="index" :value="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="时间" prop="time" label-width="100px">
<el-date-picker
v-model="dateRange"
type="datetimerange"
range-separator="-"
start-placeholder="开始时间"
end-placeholder="结束时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-form>
</el-col> -->
</el-row>
<el-row :gutter="20">
<el-col :span="6" class="left-container">
<el-row>
<el-col :span="24">
<el-form
:model="queryParamsPatient"
ref="queryRef"
v-show="showSearch"
label-width="120"
inline="true"
>
<el-form-item label="患者信息" prop="searchKey" label-width="120">
<el-input
v-model="queryParamsPatient.searchKey"
placeholder="请输入姓名/证件号"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item
label="发药状态"
prop="statusEnum"
v-if="selectType !== 'drug'"
label-width="120"
>
<el-select
v-model="queryParamsPatient.statusEnum"
placeholder="请选择"
clearable
filterable
style="width: 240px"
@change="handleQuery"
>
<el-option
v-for="item in dispenseStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="就诊日期" prop="startTime">
<el-date-picker
v-model="dateRange"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 240px"
@keyup.enter="handleQuery"
@change="handleQuery"
/>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20" style="border-radius: 4px">
<el-col :span="24">
<el-table
:data="patientList"
border
highlight-current-row
style="height: cal(100%-200px); width: 100%"
@row-click="handleCurrentChange"
>
<!-- 汇总状态下显示的字段 -->
<template v-if="selectType === 'total'">
<el-table-column prop="applicantName" label="申请人" align="center" />
<el-table-column prop="sourceLocationName" label="发药药房" align="center" />
<el-table-column prop="statusEnum_enumText" label="状态" align="center" />
<el-table-column prop="applyTime" label="申请日期" align="center">
<template #default="scope">
{{ scope.row.applyTime ? parseTime(scope.row.applyTime, '{y}-{m}-{d}') : '-' }}
</template>
</el-table-column>
</template>
<!-- 明细状态下显示的字段 -->
<template v-else>
<el-table-column prop="patientName" label="姓名" align="center" />
<el-table-column prop="genderEnum_enumText" label="性别" align="center" />
<el-table-column prop="age" label="年龄" align="center" />
<el-table-column prop="startTime" label="就诊日期" align="center">
<template #default="scope">
{{ scope.row.startTime ? parseTime(scope.row.startTime, '{y}-{m}-{d}') : '-' }}
</template>
</el-table-column>
</template>
</el-table>
</el-col>
<el-col :span="24" style="padding: 10px 12px 12px 12px">
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
</el-col>
<el-col :span="18" :xs="24">
<!-- 根据当前选中的tab显示不同的表格组件 -->
<MedicationTable v-if="selectType === 'total'" :tableData="tableData" :busNo="busNo" />
<DetailMedicationTable
v-else-if="selectType === 'drug'"
:tableData="detailTableData"
:encounterId="encounterId"
@call-medication-summary-detail="callMedicationSummaryDetail"
/>
</el-col>
</el-row>
=======
<div class="app-container" style="padding-top: 0px">
<el-tabs v-model="activeName" @tab-click="handleClick" class="centered-tabs tabs-font">
<el-tab-pane label="发药汇总单" name="summary">
@@ -193,7 +11,6 @@
<ReturnDrug />
</el-tab-pane>
</el-tabs>
>>>>>>> v1.3
</div>
</template>
@@ -201,12 +18,9 @@
import { ref, reactive, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import MedicationTable from './components/MedicationTable.vue';
<<<<<<< HEAD
=======
import MedicationSummary from './components/MedicationSummary.vue';
import MedicationDetails from './components/MedicationDetails.vue';
import ReturnDrug from './components/ReturnDrug.vue';
>>>>>>> v1.3
import DetailMedicationTable from './components/DetailMedicationTable.vue';
import { getCurrentInstance } from 'vue';
import {
@@ -216,11 +30,7 @@ import {
getFromDetailList,
} from './components/api';
<<<<<<< HEAD
// 响应式数据
=======
const activeName = ref('summary');
>>>>>>> v1.3
const loading = ref(false);
const patientList = ref([]);
const total = ref(0);
@@ -478,8 +288,6 @@ onMounted(() => {
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
padding: 20px;
}
<<<<<<< HEAD
=======
.centered-tabs :deep(.el-tabs__nav-wrap) {
display: flex;
@@ -495,5 +303,4 @@ onMounted(() => {
font-size: 16px !important;
padding: 0 60px !important;
}
>>>>>>> v1.3
</style>

View File

@@ -542,210 +542,6 @@ const sexOptions = gend;
// 入院途径
const admissionOptions = adm_way;
<<<<<<< HEAD
// 表单数据
const formData = reactive({
//组织机构代码
medins_orgcode: '',
//医疗付费方式
//健康卡号
//姓名--患者姓名
patient_name: '',
//性别--患者性别
gend: '',
//出生日期
brdy: '',
//年龄
age: '',
//国籍
ntly: '',
//籍贯
napl: '',
//民族
naty: '',
//身份证号
certNo: '',
//户口地址
resd_addr:'',
//工作单位及地址
empr_addr: '',
//联系人姓名
coner_name: '',
//关系
patn_rlts: '',
//地址
addr: '',
//电话
tel: '',
//第几次住院
patn_ipt_cnt: '',
//住院号 mdtrtsn
ipt_no: '',
//病案号
medcasno: '',
//入院途径
adm_way: '',
//入院时间
adm_time: '',
//入院科室 adm_dept_codg
adm_dept_name: '',
//病房 入院病房
adm_ward: '',
//实际住院天数
act_ipt_days: '',
//主要诊断----不确定
diag_code: '',
//其他诊断
//是否输血
//血型
//Rh
//药物过敏史
//科主任 科主任姓名--deptort_name:
deptort: '',
//主任(副主任)医师
chfdr_name: '',
//主治医师 主诊医师姓名--chfpdr_name
atddr_no: '',
//住院医师 住院医师姓名--ipdr_name
ipdr_code: '',
//责任护士 责任护士姓名--resp_nurs_name
resp_nurs_code: '',
//住院总医师
//实习医师
intn_dr_name: '',
//病案质量 病案质量名称--medcas_qlt_name
medcas_qlt_code: '',
//编码员
codr_name: '',
//质控日期
qltctrl_date: '',
hospital: {
orgCode: '41275054-7',
paymentMethod: '城乡居民基本医疗保险'
},
patient: {
healthCardNo: '',
name: '',
gender: '',
birthDate: '',
age: '',
nationality: '中国',
nativePlace: '',
ethnicity: '汉族',
idCardNo: '',
householdAddress: '',
workUnit: '',
contactName: '',
contactRelation: '',
contactAddress: '',
contactPhone: ''
},
admission: {
times: 1,
hospitalNo: '',
recordNo: '',
channel: '',
admitTime: '',
department: '',
ward: '',
confirmDate: '',
dischargeTime: '',
dischargeDepartment: '',
dischargeWard: '',
hospitalDays: ''
},
diagnosis: {
mainDiagnosis: '',
otherDiagnosis: ''
},
medicalInfo: {
bloodTransfusion: '2',
bloodType: '',
rhType: '',
drugAllergy: '1'
},
doctorInfo: {
departmentDirector: '',
chiefPhysician: '',
attendingPhysician: '',
residentPhysician: '',
chargeNurse: '',
chiefResident: '',
intern: '',
recordQuality: '1',
coder: '',
qualityControlDate: ''
}
=======
// 是否输血
const bloodOption = sys_yes_no;
// 血型
@@ -806,7 +602,6 @@ const rules = ref({
name: [{ required: true, message: '请选择诊断', trigger: 'change' }],
medTypeCode: [{ required: true, message: '请选择诊断类型', trigger: 'change' }],
diagSrtNo: [{ required: true, message: '请输入诊断序号', trigger: 'change' }],
>>>>>>> v1.3
});
</script>

View File

@@ -1,23 +1,11 @@
<template>
<div style="width: 100%" class="medicalSec">
<<<<<<< HEAD
<div style="margin-bottom: 5px;margin-top: 20px;">
<el-button type="primary" @click="addItem" :disabled="false">
新增
</el-button>
=======
<div style="margin-bottom: 5px; margin-top: 20px">
<el-button type="primary" @click="addItem" :disabled="false"> 新增 </el-button>
>>>>>>> v1.3
<el-button type="danger" plain @click="handleDelete" :disabled="false"> 删除 </el-button>
</div>
<div class="tableBox">
<div class="tableBoxInner">
<<<<<<< HEAD
<div :class="{'borderBottom':!tableData_top.length}" class="tableBoxItemHeader">
<div class="item itemIndex">
<div :class="{'itemCheckBox':!isChooseAll,'itemCheckBoxAct':isChooseAll}" @click="chooseAll">
=======
<div
:class="{ borderBottom: !formData.medicalSecond.surgery_tableData.length }"
class="tableBoxItemHeader"
@@ -27,7 +15,6 @@
:class="{ itemCheckBox: !isChooseAll, itemCheckBoxAct: isChooseAll }"
@click="chooseAll"
>
>>>>>>> v1.3
<span v-show="isChooseAll"></span>
</div>
</div>
@@ -35,13 +22,6 @@
<div class="item itemSurgeryLevel">手术级别</div>
<div class="item itemSurgeryName">手术及操作名称</div>
<div class="itemSpec">
<<<<<<< HEAD
<div class="spec" style="width: 100%;border-bottom: 1px solid #ebeef5;">手术及操作医师</div>
<div class="spec">
<div class="specItem">术者</div>
<div class="specItem" style="border-left: 1px solid #ebeef5;">Ⅰ助</div>
<div class="specItem" style="border-left: 1px solid #ebeef5;">Ⅱ助</div>
=======
<div class="spec" style="width: 100%; border-bottom: 1px solid #ebeef5">
手术及操作医师
</div>
@@ -49,7 +29,6 @@
<div class="specItem">术者</div>
<div class="specItem" style="border-left: 1px solid #ebeef5">Ⅰ助</div>
<div class="specItem" style="border-left: 1px solid #ebeef5">Ⅱ助</div>
>>>>>>> v1.3
</div>
</div>
<div class="item itemCutLevel">切口愈合等级</div>
@@ -58,14 +37,6 @@
<div class="item itemTime borderRight">手术时长(H)</div>
</div>
<div
<<<<<<< HEAD
class="tableBoxItem"
:class="{'borderBottom':index+1===tableData_top.length}"
v-for="(item,index) in tableData_top"
:key="index">
<div class="item itemIndex">
<div :class="{'itemCheckBox':!item['isChoose'],'itemCheckBoxAct':item['isChoose']}" @click="checkItem(item)">
=======
class="tableBoxItem"
:class="{ borderBottom: index + 1 === formData.medicalSecond.surgery_tableData.length }"
v-for="(item, index) in formData.medicalSecond.surgery_tableData"
@@ -76,28 +47,11 @@
:class="{ itemCheckBox: !item['isChoose'], itemCheckBoxAct: item['isChoose'] }"
@click="checkItem(item, false)"
>
>>>>>>> v1.3
<span v-show="item['isChoose']"></span>
</div>
</div>
<div class="item itemDate">
<el-date-picker
<<<<<<< HEAD
v-model="item.ctrlDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="手术操作日期"
:default-time="item.ctrlDate"
/>
</div>
<div class="item itemSurgeryLevel">
<el-select v-model="item.surgeryLevel" placeholder="请选择手术级别">
<el-option
v-for="item in item['surgeryLevelArr']"
:key="item.value"
:label="item.title"
:value="item.value"
=======
v-model="item.oprn_oprt_date"
type="date"
value-format="YYYY-MM-DD"
@@ -111,25 +65,10 @@
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemSurgeryName">
<<<<<<< HEAD
<el-input v-model="item.surgeryName"></el-input>
</div>
<div class="itemSpec">
<div class="spec_">
<div class="specItem" style="padding: 10px;">
<el-input v-model="item.surgeryMasterName"></el-input>
</div>
<div class="specItem" style="padding: 10px;border-left: 1px solid #ebeef5;">
<el-input v-model="item.surgeryMasterName_1"></el-input>
</div>
<div class="specItem" style="padding: 10px;border-left: 1px solid #ebeef5;">
<el-input v-model="item.surgeryMasterName_2"></el-input>
=======
<el-input v-model="item.oprn_oprt_name"></el-input>
</div>
<div class="itemSpec">
@@ -142,73 +81,41 @@
</div>
<div class="specItem" style="padding: 10px; border-left: 1px solid #ebeef5">
<el-input v-model="item.asit_name2"></el-input>
>>>>>>> v1.3
</div>
</div>
</div>
<div class="item itemCutLevel">
<<<<<<< HEAD
<el-select v-model="item.cutLevel">
<el-option
v-for="item in item['cutLevelArr']"
:key="item.value"
:label="item.title"
:value="item.value"
=======
<el-select v-model="item.sinc_heal_lv_code">
<el-option
v-for="item in cutLevelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemCutLevel">
<<<<<<< HEAD
<el-select v-model="item.anesthesiaType" placeholder="请选择手术级别">
<el-option
v-for="item in operationLevelList"
:key="item.id"
:label="item.name"
:value="item.id"
=======
<el-select v-model="item.anst_mtd_code" placeholder="请选择麻醉方式">
<el-option
v-for="item in anesthesiaTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemCutLevel">
<<<<<<< HEAD
<el-select v-model="item.anesthesiaLevel" placeholder="请选择手术级别">
<el-option
v-for="item in item.anesthesiaLevelArr"
:key="item.id"
:label="item.name"
:value="item.id"
=======
<el-select v-model="item.anst_lv_code" placeholder="请选择麻醉分级">
<el-option
v-for="item in anesthesiaLevelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemTime borderRight">
<<<<<<< HEAD
<el-input v-model="item.surgeryTime"></el-input>
=======
<el-input v-model="item.oprn_con_time"></el-input>
>>>>>>> v1.3
</div>
</div>
</div>
@@ -216,16 +123,6 @@
<div class="form-row">
<div class="form-item">
<label>手术方式:</label>
<<<<<<< HEAD
<el-select v-model="formData['surgeryType']">
<el-option v-for="(item,index) in formData['surgeryTypeArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
</el-select>
</div>
<div class="form-item">
<label>离院方式:</label>
<el-select v-model="formData['leaveType']">
<el-option v-for="(item,index) in formData['leaveTypeArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.surgeryType">
<el-option
v-for="item in surgeryTypeOptions"
@@ -244,17 +141,12 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>是否有出院31天内再住院计划:</label>
<<<<<<< HEAD
<el-select v-model="formData['isPlan']">
<el-option v-for="(item,index) in formData['isPlanArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.dscg_31days_rinp_flag">
<el-option
v-for="item in isPlanOptions"
@@ -262,46 +154,29 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item">
<label>目的:</label>
<<<<<<< HEAD
<el-input v-model="formData['purpose']"></el-input>
=======
<el-input
v-model="formData.medicalSecond.dscg_31days_rinp_pup"
placeholder="请填写目的"
></el-input>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>颅脑损伤患者昏迷时间-入院前:</label>
<<<<<<< HEAD
<el-input type="date" v-model="formData['comaDurationTime_before']" />
</div>
<div class="form-item">
<label>入院后:</label>
<el-input type="date" v-model="formData['comaDurationTime_after']" />
=======
<el-input type="date" v-model="formData.medicalSecond.brn_damg_bfadm_coma_dura" />
</div>
<div class="form-item">
<label>入院后:</label>
<el-input type="date" v-model="formData.medicalSecond.brn_damg_afadm_coma_dura" />
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>肿瘤分期:</label>
<<<<<<< HEAD
<el-select v-model="formData['tumorStaging']">
<el-option v-for="(item,index) in formData['tumorStagingArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.tumorStaging">
<el-option
v-for="item in tumorStagingOptions"
@@ -309,22 +184,10 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item" style="flex: 0">
<label>T:</label>
<<<<<<< HEAD
<label class="form-item-specLabel"><div class="specLabelInner" style="width: 80px;margin: 0 8px 0 0;"><el-input v-model="formData['tumor_T']"></el-input></div> </label>
</div>
<div class="form-item" style="flex: 0">
<label>N:</label>
<label class="form-item-specLabel"><div class="specLabelInner" style="width: 80px;margin: 0 8px 0 0;"><el-input v-model="formData['tumor_N']"></el-input></div> </label>
</div>
<div class="form-item" style="flex: 0">
<label>M:</label>
<label class="form-item-specLabel"><div class="specLabelInner" style="width: 80px;margin: 0 8px 0 0;"><el-input v-model="formData['tumor_M']"></el-input></div> </label>
=======
<label class="form-item-specLabel"
><div class="specLabelInner" style="width: 80px; margin: 0 8px 0 0">
<el-input v-model="formData.medicalSecond.tumor_T"></el-input>
@@ -346,17 +209,12 @@
<el-input v-model="formData.medicalSecond.tumor_M"></el-input>
</div>
</label>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>判断依据:</label>
<<<<<<< HEAD
<el-select v-model="formData['judgmentBase']">
<el-option v-for="(item,index) in formData['judgmentBaseArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.judgmentBase">
<el-option
v-for="item in judgmentBaseOptions"
@@ -364,14 +222,10 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item">
<label>分化程度:</label>
<<<<<<< HEAD
<el-input type="date" v-model="formData['degreeDifferentiation']" />
=======
<!-- <el-input type="date" v-model="formData.medicalSecond.bkup_deg" /> -->
<el-select v-model="formData.medicalSecond.bkup_deg_code" placeholder="请选择分化程度">
<el-option
@@ -381,23 +235,12 @@
:value="item.value"
></el-option>
</el-select>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>临床路径-进入路径</label>
<<<<<<< HEAD
<el-select v-model="formData['enterPath']">
<el-option v-for="(item,index) in formData['enterPathArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
</el-select>
</div>
<div class="form-item">
<label>变异:</label>
<el-select v-model="formData['mutation']">
<el-option v-for="(item,index) in formData['mutationArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<!-- <el-select v-model="formData.medicalSecond.enterPath">
<el-option
v-for="item in enterPathOptions"
@@ -417,21 +260,12 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>退出路径</label>
<<<<<<< HEAD
<el-select v-model="formData['outPath']">
<el-option v-for="(item,index) in formData['outPathArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
</el-select>
</div>
<div class="form-item">
</div>
=======
<!-- <el-select v-model="formData.medicalSecond.outPath">
<el-option
v-for="item in outPathOptions"
@@ -443,7 +277,6 @@
<el-input v-model="formData.medicalSecond.outPath" placeholder="请输入"></el-input>
</div>
<div class="form-item"></div>
>>>>>>> v1.3
</div>
<div class="form-row" styLe="margin: 0;">
<div class="form-item" styLe="margin: 0;">
@@ -452,19 +285,6 @@
</div>
<div class="form-row">
<div class="form-item" style="flex: 0">
<<<<<<< HEAD
<label class="form-item-specLabel">特级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_spec']"></el-input></div> 小时</label>
</div>
<div class="form-item" style="flex: 0">
<label class="form-item-specLabel">1级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_1']"></el-input></div> 小时</label>
</div>
<div class="form-item" style="flex: 0">
<label class="form-item-specLabel">2级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_2']"></el-input></div> 小时</label>
</div>
<div class="form-item" style="flex: 0">
<label class="form-item-specLabel">3级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_3']"></el-input></div> 小时</label>
=======
<label class="form-item-specLabel"
>特级护理
<div class="specLabelInner">
@@ -499,16 +319,11 @@
</div>
小时</label
>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>呼吸机使用:</label>
<<<<<<< HEAD
<el-select v-model="formData['ventilatorUse']">
<el-option v-for="(item,index) in formData['ventilatorUseArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.use_vent_flag">
<el-option
v-for="item in ventilatorUseOptions"
@@ -516,210 +331,20 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item">
<label>有创呼吸机使用时间小时:</label>
<<<<<<< HEAD
<el-input v-model="formData['ventilatorUseTime']"></el-input>
=======
<el-input
v-model="formData.medicalSecond.vent_used_dura"
placeholder="请填写有创呼吸机使用时间(小时)"
></el-input>
>>>>>>> v1.3
</div>
</div>
</div>
</template>
<script setup>
<<<<<<< HEAD
import {nextTick, reactive, ref, watch} from 'vue';
import { ElMessage } from 'element-plus'
let chooseData = reactive([])//表格中选中的数据 TODO
const tableData_top = reactive([])
const tableData_sub = ref([
{
},
{
}
])
let isChooseAll = ref(false);
const formData = ref({
surgeryDate: '2025-10-10',
surgeryType: '',
surgeryTypeArr: [
{
title: '择期手术',
value: 1,
},
{
title: '限期手术',
value: 2,
},
{
title: '急诊手术',
value: 3,
}
],
leaveType: '',
leaveTypeArr: [
{
title: '医嘱离院',
value: 1,
},
{
title: '医嘱转院',
value: 2,
},
{
title: '医嘱转社区卫生服务机构',
value: 3,
},
{
title: '非医嘱离院',
value: 4,
},
{
title: '死亡',
value: 5,
},
{
title: '其他',
value: 6,
}
],
isPlan: '',
isPlanArr: [
{
title: '是',
value: 1,
},
{
title: '否',
value: 1,
}
],
purpose: '',
comaDurationTime_before: '',//昏迷时间---入院前
comaDurationTime_after: '',//昏迷时间---入院后
tumorStaging: '',
tumorStagingArr: [
{
title: 'C',
value: 1,
},
{
title: 'P',
value: 2,
}
],
judgmentBase: '',
judgmentBaseArr: [
{
title: '0期',
value: 0,
},
{
title: '1期',
value: 1,
},
{
title: '2期',
value: 2,
},
{
title: '3期',
value: 3,
},
{
title: '4期',
value: 4,
},
{
title: '不详',
value: 5,
}
],
tumor_T: '',
tumor_N: '',
tumor_M: '',
degreeDifferentiation: '',
enterPath: '',
enterPathArr: [
{
title: '是',
value: 1,
},
{
title: '否',
value: 1,
}
],
outPath: '',
outPathArr: [
{
title: '是',
value: 1,
},
{
title: '否',
value: 1,
}
],
mutation: '',
mutationArr: [
{
title: '有',
value: 1,
},
{
title: '无',
value: 1,
}
],
nursingLevel_spec: '',
nursingLevel_1: '',
nursingLevel_2: '',
nursingLevel_3: '',
ventilatorUse: '',
ventilatorUseArr: [
{
title: '未使用',
value: 1,
},
{
title: '无创',
value: 2,
},
{
title: '有创',
value: 3,
},
{
title: '无创+有创',
value: 4,
}
],
ventilatorUseTime: '',
});
const operationLevelList = [
{ name: '一级', id: 1 },
{ name: '二级', id: 2 },
{ name: '三级', id: 3 },
];
=======
import { reactive, ref, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { cloneDeep, forEach } from 'lodash';
@@ -761,7 +386,6 @@ const {
'oprn_patn_type_code',
'bkup_deg_code'
);
>>>>>>> v1.3
// 手术类型
const surgeryTypeOptions = oprn_patn_type_code;
@@ -801,198 +425,6 @@ watch(
const addItem = () => {
let data = {
//手术操作日期 oprn_oprt_date
<<<<<<< HEAD
oprn_date: '',
//手术级别 手术级别名称--oprn_lv_code
oprn_lv_code: '',
//手术及操作名称 oprn_oprt_code
oprn_oprt_name: '',
//手术及操作医师
//术者
oper_name: '',
//Ⅰ助
asit_1_name: '',
//Ⅱ助
asit_name2: '',
//切口愈合等级 sinc_heal_lv_code
sinc_heal_lv: '',
//麻醉方式
anst_way: '',
//麻醉分级 anst_lv_code
anst_lv_name: '',
//手术时长
//手术方式
//离院方式
dscg_way: '',
//是否有出院31天内再住院计划-----不确定
days_rinp_flag_31: '',
//目的
days_rinp_pup_31: '',
//颅脑损伤患者昏迷时间 入院前
brn_damg_bfadm_coma_dura: '',
//颅脑损伤患者昏迷时间 入院后
brn_damg_afadm_coma_dura: '',
//肿瘤分期
//T
//N
//M
//判断依据
//分化程度 bkup_deg_code
bkup_deg: '',
//临床路径-进入路径
//变异
//退出路径
//护理级别
//特级护理
spga_nurscare_days: '',
//1级护理
lv1_nurscare_days: '',
//2级护理
scd_nurscare_days: '',
//3级护理
lv3_nurscare_days: '',
//呼吸机使用 vent_used_days vent_used_h_cnt vent_used_m_cnt
vent_used_dura: '',
//有创呼吸机使用时间
isChoose: false,
ctrlDate: '2025-10-10',
surgeryLevel: '',
surgeryLevelArr: [
{
title: '1级',
value: 1,
},
{
title: '2级',
value: 2,
},
{
title: '3级',
value: 3,
},
{
title: '4级',
value: 4,
}
],
surgeryName: '',
surgeryMasterName: '',
surgeryMasterName_1: '',
surgeryMasterName_2: '',
cutLevel: '',
cutLevelArr: [
{
title: '1/甲',
value: 1,
},
{
title: '2/乙',
value: 2,
}
],
anesthesiaType: '',
anesthesiaTypeArr: [],
anesthesiaEr: '',
anesthesiaLevel: '',
anesthesiaLevelArr: [
{
title: '1',
value: 1,
},
{
title: '2',
value: 2,
},
],
surgeryTime: ''
}
//push
tableData_top.unshift(
data
)
tableData_top.map((d,i) => {
d.currentIndex = i
})
}
const checkItem = (e) => {
chooseData = []
e['isChoose'] = !e['isChoose']
tableData_top.map((d) => {
if (d['isChoose']) {
chooseData.push(d)
}
})
}
const chooseAll = () => {
isChooseAll.value = !isChooseAll.value
if (tableData_top.length) {
tableData_top.map((d) => {
d['isChoose'] = !isChooseAll.value
checkItem(d)
})
}
}
//删除方法
const handleDelete = () => {
if (!tableData_top.length) { return }
let deleteId = []
chooseData.map((d) => {
deleteId.push(d['currentIndex'])
})
for (let i = tableData_top.length - 1; i >= 0; i--) {
if (deleteId.includes(tableData_top[i].currentIndex)) {
tableData_top.splice(i, 1);
}
}
isChooseAll.value = false
msgSuccess('删除成功')
}
const msgSuccess = (msg) => {
ElMessage({
message: msg,
type: 'success',
})
}
=======
oprn_oprt_date: '',
// 手术级别
oprn_lv_code: '',
@@ -1064,7 +496,6 @@ const handleDelete = () => {
isChooseAll.value = false;
msgSuccess('删除成功');
};
>>>>>>> v1.3
const msgSuccess = (msg) => {
ElMessage({
@@ -1076,22 +507,14 @@ const msgSuccess = (msg) => {
<style lang="scss">
.medicalSec {
<<<<<<< HEAD
.el-date-editor.el-input, .el-date-editor.el-input__wrapper {
=======
.el-date-editor.el-input,
.el-date-editor.el-input__wrapper {
>>>>>>> v1.3
width: 100%;
}
.el-table td.el-table__cell div {
width: 100%;
}
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
</style>
<style lang="scss" scoped>
:deep(.el-table__expand-icon) {

View File

@@ -26,14 +26,6 @@
>
<el-table-column type="index" width="80" align="center" label="序号" />
<el-table-column prop="patientName" align="center" label="申请患者" />
<<<<<<< HEAD
<el-table-column prop="genderEnum_enumText" label="性别" align="center" />
<el-table-column label="年龄" align="center">
<template #default="scope">
{{ scope.row.age ? `${scope.row.age}` : '-' }}
</template>
</el-table-column>
=======
<el-table-column prop="genderEnum_enumText" width="80" label="性别" align="center" />
<el-table-column prop="age" width="80" label="年龄" align="center" />
<el-table-column prop="busNo" align="center" label="患者住院号">
@@ -51,7 +43,6 @@
{{ scope.row.admitSourceCode || '-' }}
</template>
</el-table-column>
>>>>>>> v1.3
<el-table-column prop="sourceName" align="center" label="申请来源">
<template #default="scope">
{{ scope.row.sourceName || '-' }}

View File

@@ -1,192 +1,4 @@
<template>
<<<<<<< HEAD
<div class="dashboard-container">
<!-- 顶部导航栏 -->
<header class="header">
<div class="logo">
<span class="logo-text">医院信息管理系统</span>
</div>
<div class="header-right">
<div class="notification-badge">
<i class="header-icon">🔔</i>
<span class="badge">2</span>
</div>
<i class="header-icon"></i>
<div class="user-info">
<span class="user-avatar">👤</span>
<span>用户</span>
</div>
</div>
</header>
<!-- 主体内容 -->
<div class="main-content">
<!-- 左侧导航栏 -->
<nav class="sidebar">
<div class="menu-item active">
<span class="menu-icon">📊</span>
<span>仪表盘</span>
</div>
<div class="menu-item">
<span class="menu-icon">👥</span>
<span>患者管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">💉</span>
<span>预约管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">🏥</span>
<span>门诊管理</span>
</div>
<div class="menu-item">
<span class="menu-icon"></span>
<span>住院管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">💊</span>
<span>药房管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">📋</span>
<span>报表统计</span>
</div>
<div class="menu-item">
<span class="menu-icon"></span>
<span>系统设置</span>
</div>
</nav>
<!-- 主内容区 -->
<div class="content-wrapper">
<div class="awaitingBtn">
<el-button @click="awaitingMedicineBtn">效期预警 <span>{{ total }}</span></el-button>
</div>
<h1 class="section-title">仪表盘</h1>
<!-- 关键指标卡片 -->
<div class="dashboard-grid">
<div class="card">
<div class="card-title">今日预约量</div>
<div class="card-value">126</div>
<div class="card-stats">
<span class="stats-icon"></span>
<span>12% 较昨日</span>
</div>
</div>
<div class="card">
<div class="card-title">门诊量统计</div>
<div class="card-value">342</div>
<div class="card-stats">
<span class="stats-icon"></span>
<span>8% 较上周</span>
</div>
</div>
<div class="card">
<div class="card-title">住院患者数</div>
<div class="card-value">78</div>
<div class="card-stats down">
<span class="stats-icon"></span>
<span>5% 较上周</span>
</div>
</div>
<div class="card">
<div class="card-title">药品库存预警</div>
<div class="card-value">8</div>
<div class="card-stats">
<span class="stats-icon">!</span>
<span>需要立即处理</span>
</div>
</div>
</div>
<!-- 图表展示区 -->
<div class="chart-container">
<canvas id="statsChart"></canvas>
</div>
<!-- 重要通知和待办事项 -->
<div class="bottom-content">
<div class="notification-container">
<div class="notification-title">重要通知</div>
<ul class="notification-list">
<li class="notification-item">系统将于周六凌晨2:00进行维护升级</li>
<li class="notification-item">新的门诊排班系统已上线请尽快熟悉</li>
<li class="notification-item">三季度医疗质量分析报告已发布</li>
</ul>
</div>
<div class="todo-container">
<div class="todo-title">待办事项</div>
<ul class="todo-list">
<li class="todo-item">
<span>未完成预约</span>
<span class="todo-count">12</span>
</li>
<li class="todo-item">
<span>待处理检查结果</span>
<span class="todo-count">7</span>
</li>
<li class="todo-item">
<span>待开处方</span>
<span class="todo-count">3</span>
</li>
</ul>
<button class="btn btn-primary">查看详情</button>
</div>
</div>
<!-- 患者列表 -->
<h2 class="section-title">最近患者</h2>
<div class="table-container">
<table>
<thead>
<tr>
<th>患者姓名</th>
<th>病历号</th>
<th>年龄</th>
<th>最后就诊时间</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>张明</td>
<td>HN2023001</td>
<td>45</td>
<td>2023-10-20 09:30</td>
<td><span style="color: #67c23a;">已完成</span></td>
<td>
<button class="btn btn-outline">详情</button>
</td>
</tr>
<tr>
<td>李红</td>
<td>HN2023002</td>
<td>32</td>
<td>2023-10-20 10:15</td>
<td><span style="color: #ff9800;">待检查</span></td>
<td>
<button class="btn btn-outline">详情</button>
</td>
</tr>
<tr>
<td>王建军</td>
<td>HN2023003</td>
<td>68</td>
<td>2023-10-19 14:20</td>
<td><span style="color: #d45d79;">住院中</span></td>
<td>
<button class="btn btn-outline">详情</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
=======
<div class="container">
<div class="awaitingBtn">
<el-button @click="awaitingMedicineBtn">
@@ -202,143 +14,10 @@
<!-- <div class="logo">
<img src="/src/assets/images/jlau.jpg" />
</div> -->
>>>>>>> v1.3
</div>
</template>
<script setup name="Index">
<<<<<<< HEAD
import { ref, onMounted, onActivated } from 'vue';
import { useRouter } from 'vue-router';
import Chart from 'chart.js/auto';
import {
getExpirationWarning,
} from "./medicationmanagement/statisticalManagement/statisticalManagent";
const router = useRouter();
const total = ref(0);
function awaitingMedicineBtn() {
router.push({ path: '/medicationmanagement/statisticalManagement/earlyWarning' });
}
function getExpirationWarningCount() {
getExpirationWarning({ pageNo: 1, pageSize: 10 }).then((res) => {
total.value = res.data.total || 0;
}).catch((err) => {
console.error('获取效期预警数量失败:', err);
total.value = 0;
});
}
let chartInstance = null;
onActivated(() => {
// getExpirationWarningCount();
})
onMounted(() => {
// getExpirationWarningCount();
const ctx = document.getElementById('statsChart');
if (!ctx) return;
// 销毁已有实例
if (chartInstance) {
chartInstance.destroy();
}
// 模拟数据近7天门诊量与预约量
const labels = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
const outpatientData = [310, 335, 305, 345, 370, 270, 210]; // 门诊量(柱状图)
const appointmentData = [100, 120, 110, 130, 140, 90, 70]; // 预约量(折线图)
chartInstance = new Chart(ctx.getContext('2d'), {
type: 'bar',
data: {
labels: labels,
datasets: [
{
label: '门诊量',
data: outpatientData,
backgroundColor: '#91c8e5',
borderColor: '#66a8cc',
borderWidth: 1,
borderRadius: 4,
borderSkipped: false,
},
{
label: '预约量',
data: appointmentData,
type: 'line',
borderColor: '#f56c6c',
backgroundColor: 'rgba(245, 108, 108, 0.1)',
borderWidth: 2,
pointBackgroundColor: '#f56c6c',
pointBorderColor: '#fff',
pointBorderWidth: 2,
pointRadius: 4,
fill: true,
tension: 0.3,
lineTension: 0.3,
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
font: {
size: 12,
weight: 'bold'
}
}
},
tooltip: {
mode: 'index',
intersect: false,
backgroundColor: 'rgba(0, 0, 0, 0.7)',
titleFont: {
size: 13
},
bodyFont: {
size: 12
}
}
},
scales: {
x: {
grid: {
display: false
},
ticks: {
font: {
size: 11
}
}
},
y: {
beginAtZero: true,
max: 400,
stepSize: 50,
grid: {
color: 'rgba(0, 0, 0, 0.05)'
},
ticks: {
font: {
size: 11
}
}
}
}
}
});
});
=======
import { getproductReturnPage } from './medicationmanagement/statisticalManagement/statisticalManagent';
import { useStore } from '@/store/store';
const store = useStore();
@@ -374,7 +53,6 @@ function getExpirationWarningCount() {
}
getExpirationWarningCount();
>>>>>>> v1.3
</script>
<style scoped lang="scss">
@@ -386,151 +64,15 @@ getExpirationWarningCount();
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
padding: 0;
}
<<<<<<< HEAD
.header {
height: 60px;
background-color: white;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
position: sticky;
top: 0;
z-index: 1000;
}
.logo {
display: flex;
align-items: center;
}
.logo-text {
font-size: 18px;
font-weight: 600;
color: #166773;
}
.header-right {
display: flex;
align-items: center;
gap: 16px;
}
.notification-badge {
position: relative;
cursor: pointer;
}
.header-icon {
font-size: 20px;
cursor: pointer;
padding: 8px;
border-radius: 4px;
transition: background-color 0.3s;
}
.header-icon:hover {
background-color: #f5f7fa;
}
.badge {
position: absolute;
top: 0;
right: 0;
background-color: #ff4d4f;
color: white;
font-size: 12px;
padding: 2px 6px;
border-radius: 10px;
min-width: 16px;
text-align: center;
}
.user-info {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 12px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s;
}
.user-info:hover {
background-color: #f5f7fa;
}
.user-avatar {
font-size: 20px;
}
.main-content {
display: flex;
flex: 1;
overflow: hidden;
}
.sidebar {
width: 200px;
background-color: white;
box-shadow: 2px 0 4px rgba(0, 0, 0, 0.1);
overflow-y: auto;
}
.menu-item {
display: flex;
align-items: center;
padding: 16px 24px;
cursor: pointer;
transition: all 0.3s;
border-left: 3px solid transparent;
}
.menu-item:hover {
background-color: #f0f9ff;
}
.menu-item.active {
background-color: #e6f7ff;
border-left-color: #1890ff;
color: #1890ff;
font-weight: 500;
}
.menu-icon {
margin-right: 12px;
font-size: 18px;
}
.content-wrapper {
flex: 1;
padding: 20px;
overflow-y: auto;
background-color: #f5f7fa;
}
.awaitingBtn {
margin-bottom: 20px;
.el-button{
=======
.awaitingBtn {
.el-button {
>>>>>>> v1.3
border: 1px #166773 solid;
span {
color: red;
margin-left: 5px;
}
}
<<<<<<< HEAD
.el-button:hover{
=======
.el-button:hover {
>>>>>>> v1.3
border: 1px #166773 solid;
color: #166773;
span {
@@ -538,12 +80,9 @@ getExpirationWarningCount();
margin-left: 5px;
}
}
<<<<<<< HEAD
=======
position: absolute;
top: 20px;
left: 20px;
>>>>>>> v1.3
}
.section-title {

View File

@@ -1,9 +1,4 @@
<<<<<<< HEAD
import request from '@/utils/request'
=======
import request from '@/utils/request';
>>>>>>> v1.3
// 申请单相关接口
/**
@@ -58,19 +53,6 @@ export function getNursingOrdersInfos() {
}
/**
<<<<<<< HEAD
* 查询护理医嘱信息
*/
export function getNursingOrdersInfos() {
return request({
url: '/reg-doctorstation/special-advice/nursing-orders',
method: 'get'
})
}
/**
=======
>>>>>>> v1.3
* 保存护理医嘱信息
* @param {Object} data - 护理医嘱数据
* @param {number} data.encounterId - 就诊id
@@ -87,13 +69,8 @@ export function saveNursingOrders(data) {
return request({
url: '/reg-doctorstation/special-advice/nursing-orders',
method: 'post',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
/**
@@ -103,13 +80,8 @@ export function getEncounterNursingOrders(params) {
return request({
url: '/reg-doctorstation/special-advice/encounter-nursing-orders',
method: 'get',
<<<<<<< HEAD
params: params
})
=======
params: params,
});
>>>>>>> v1.3
}
/**

View File

@@ -24,16 +24,12 @@
<el-table-column prop="item" label="项目" width="180" align="center" />
<el-table-column prop="currentStatus" label="当前状态" width="260" align="center">
<template #default="scope">
<<<<<<< HEAD
<el-tag :type="getStatusType(scope.row.currentStatus)" size="small" class="status-tag">
=======
<el-tag
v-if="scope.row.currentStatus"
:type="getStatusType(scope.row.currentStatus)"
size="small"
class="status-tag"
>
>>>>>>> v1.3
{{ scope.row.currentStatus }}
</el-tag>
</template>
@@ -148,13 +144,8 @@
</el-table>
<!-- 操作按钮区域 -->
<div class="nursing-status-actions">
<<<<<<< HEAD
<el-button @click="handleCancel" size="small">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="small">确定</el-button>
=======
<el-button @click="handleCancel" size="medium">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="medium">确定</el-button>
>>>>>>> v1.3
</div>
</template>
</div>
@@ -390,10 +381,6 @@ const fetchNursingStatusData = () => {
loading.value = false;
if (res.code === 200 && res.data) {
<<<<<<< HEAD
// 填充各列表数据
nursingLevelList.value = res.data.nursingList || [];
=======
let nursingList = [];
let nursingOrderNameList = ['I级护理', 'II级护理', 'III级护理', '特级护理'];
nursingOrderNameList.forEach((str) => {
@@ -405,7 +392,6 @@ const fetchNursingStatusData = () => {
});
// 填充各列表数据
nursingLevelList.value = nursingList || [];
>>>>>>> v1.3
conditionList.value = res.data.conditionList || [];
dietList.value = res.data.dietList || [];
positionList.value = res.data.positionList || [];

View File

@@ -28,16 +28,12 @@
<span>{{ node.label }}</span>
<span class="tree-node-actions">
<template v-if="node.level === 1 && data.name != '常用' && data.name != '历史'">
<<<<<<< HEAD
<el-button style="color: #000000" type="text" size="small" @click.stop="addChild(data)">
=======
<el-button
style="color: #000000"
type="text"
size="small"
@click.stop="addChild(data)"
>
>>>>>>> v1.3
<el-icon>
<Plus />
</el-icon>
@@ -46,13 +42,6 @@
<el-popconfirm width="200" :hide-after="10" title="确认删除此常用诊断吗" placement="top-start"
@confirm="deleteChild(data)">
<template #reference>
<<<<<<< HEAD
<el-button style="color: #000000" v-if="
node.level === 2 &&
node.parent.data.name != '常用' &&
node.parent.data.name != '历史'
" type="text" size="small" @click.stop="">
=======
<el-button
style="color: #000000"
v-if="
@@ -64,7 +53,6 @@
size="small"
@click.stop=""
>
>>>>>>> v1.3
<el-icon>
<Minus />
</el-icon>
@@ -197,11 +185,8 @@ import { deleteTcmDiagnosis } from '../../../../doctorstation/components/api.js'
import diagnosisdialog from '../diagnosis/diagnosisdialog.vue';
import AddDiagnosisDialog from './addDiagnosisDialog.vue';
import diagnosislist from '../diagnosis/diagnosislist.vue';
<<<<<<< HEAD
=======
import { patientInfo } from '../../store/patient.js';
import { ElMessage } from 'element-plus';
>>>>>>> v1.3
// const diagnosisList = ref([]);
const allowAdd = ref(false);
const tree = ref([]);
@@ -230,12 +215,8 @@ const rules = ref({
medTypeCode: [{ required: true, message: '请选择诊断类型', trigger: 'change' }],
diagSrtNo: [{ required: true, message: '请输入诊断序号', trigger: 'change' }],
});
<<<<<<< HEAD
const isSaving = ref(false);
=======
const diagnosisNetDatas = ref([]);
>>>>>>> v1.3
watch(
() => form.value.diagnosisList,
() => {
@@ -266,31 +247,6 @@ function getList() {
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
if (res.code == 200) {
<<<<<<< HEAD
// 为每个诊断项添加默认的诊断医生和时间(如果不存在)
const diagnosisList = res.data.map(item => ({
...item,
diagnosisDoctor: item.diagnosisDoctor || props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
diagnosisTime: item.diagnosisTime || new Date().toLocaleString('zh-CN')
}));
// 对获取的数据进行排序
diagnosisList.sort((a, b) => {
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
return aNo - bNo;
});
form.value.diagnosisList = diagnosisList;
emits('diagnosisSave', false);
}
});
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res.code == 200) {
if (res.data.illness && res.data.illness.length > 0 && res.data.symptom) {
const newList = [];
=======
const datas = (res.data || []).map((item) => {
let obj = {
...item,
@@ -311,7 +267,6 @@ function getList() {
if (res.code == 200) {
if (res.data.illness.length > 0) {
diagnosisNetDatas.value = res.data.illness;
>>>>>>> v1.3
res.data.illness.forEach((item, index) => {
newList.push({
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
@@ -488,27 +443,6 @@ function handleDeleteDiagnosis(row, index) {
//中医诊断用-拼接 例如:疳气-表里俱实证
const nameArr = row.name?.split('-') || [];
if (row.conditionId) {
<<<<<<< HEAD
delEncounterDiagnosis(row.conditionId).then(() => {
// 不要立即调用getList(),而是从当前列表中移除
form.value.diagnosisList.splice(index, 1);
// 重新排序剩余的项目
const sortedList = [...form.value.diagnosisList].sort((a, b) => {
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
return aNo - bNo;
});
// 重新分配连续的序号
sortedList.forEach((item, idx) => {
item.diagSrtNo = idx + 1;
});
// 更新列表
form.value.diagnosisList = sortedList.map(item => ({ ...item }));
getTree();
});
=======
if (nameArr.length > 1) {
deleteTcmDiagnosis(row.syndromeGroupNo).then(() => {
getList();
@@ -520,7 +454,6 @@ function handleDeleteDiagnosis(row, index) {
getTree();
});
}
>>>>>>> v1.3
} else {
console.log('row============>', JSON.stringify(row));
console.log('item============>', index);
@@ -729,7 +662,3 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
align-items: center;
}
</style>
<<<<<<< HEAD
=======
>>>>>>> v1.3

View File

@@ -100,17 +100,6 @@ export function transferOrganization(data) {
return request({
url: '/reg-doctorstation/special-advice/transfer-organization-orders',
method: 'post',
<<<<<<< HEAD
data: data
})
}
=======
data: data,
});
}
>>>>>>> v1.3

View File

@@ -56,10 +56,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref, computed } from 'vue';
import BloodTransfusion from './bloodTransfusion';
=======
import {
getCurrentInstance,
onBeforeMount,
@@ -70,7 +66,6 @@ import {
nextTick,
} from 'vue';
import BloodTransfusion from './bloodTransfusion.vue';
>>>>>>> v1.3
import { patientInfo } from '../../../store/patient.js';
import Surgery from './surgery.vue';
import LaboratoryTests from './laboratoryTests.vue';

View File

@@ -9,11 +9,7 @@
>
<div style="padding: 0 80px">
<el-form :model="form" :rules="rules" ref="formRef">
<<<<<<< HEAD
<el-form-item label="出院方式">
=======
<el-form-item label="出院方式" prop="outpatientType">
>>>>>>> v1.3
<el-select v-model="form.outpatientType">
<el-option
v-for="(item, index) in dscg_way"
@@ -23,21 +19,13 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="出院时间">
=======
<el-form-item label="出院时间" prop="outpatientTime">
>>>>>>> v1.3
<el-radio-group v-model="form.outpatientTime">
<el-radio value="1">今日</el-radio>
<el-radio value="2">明日</el-radio>
</el-radio-group>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="出院描述"
=======
<el-form-item label="出院描述" prop="outpatientDescription"
>>>>>>> v1.3
><el-input v-model="form.outpatientDescription" type="textarea" rows="5" />
</el-form-item>
</el-form>
@@ -52,11 +40,6 @@
</template>
<script setup>
<<<<<<< HEAD
const { proxy } = getCurrentInstance();
const { dscg_way } = proxy.useDict('dscg_way');
const dialogVisible = ref(false);
=======
import { toRaw } from 'vue';
import { leaveHospital } from '../../api';
import { dayjs } from 'element-plus';
@@ -85,14 +68,11 @@ const { dscg_way } = proxy.useDict('dscg_way');
const dialogVisible = ref(false);
const formRef = ref(null);
const emit = defineEmits(['success']);
>>>>>>> v1.3
const form = reactive({
outpatientType: [],
outpatientTime: '',
outpatientDescription: '',
});
<<<<<<< HEAD
=======
const rules = {
outpatientType: [{ required: true, message: '请选择出院方式', trigger: 'change' }],
outpatientTime: [{ required: true, message: '请选择出院时间', trigger: 'change' }],
@@ -106,18 +86,11 @@ function getEndTime() {
}
return date.format('YYYY-MM-DD HH:mm:ss');
}
>>>>>>> v1.3
function openDialog() {
dialogVisible.value = true;
}
<<<<<<< HEAD
defineExpose({
openDialog,
});
</script>
=======
const submitApplicationForm = async () => {
if (!formRef.value) return;
try {
@@ -153,4 +126,3 @@ defineExpose({
openDialog,
});
</script>
>>>>>>> v1.3

View File

@@ -65,11 +65,7 @@
<el-radio-button label="1">长期</el-radio-button>
<el-radio-button label="2">临时</el-radio-button>
</el-radio-group>
<<<<<<< HEAD
<el-select v-model="orderClassCode" placeholder="医嘱类型" style="width: 240px">
=======
<el-select v-model="orderClassCode" placeholder="医嘱类型" style="width: 240px" clearable>
>>>>>>> v1.3
<el-option
v-for="item in adviceTypeList"
:key="item.value"
@@ -77,11 +73,6 @@
:value="item.value"
/>
</el-select>
<<<<<<< HEAD
<el-select v-model="orderStatus" placeholder="医嘱状态" style="width: 240px"> </el-select>
<el-button link type="primary" @click="handleTransferOrg">转科</el-button>
<el-button link type="primary" @click="handleLeaveHospital">出院</el-button>
=======
<el-select v-model="orderStatus" placeholder="医嘱状态" style="width: 240px" clearable>
<el-option
v-for="item in statusOption"
@@ -96,518 +87,20 @@
</el-button>
<el-button link type="primary" @click="onNursingStatus">护理状态</el-button>
<el-button link type="primary" @click="refresh()">刷新数据</el-button>
>>>>>>> v1.3
</el-space>
</div>
</div>
<div class="inpatientDoctor-order-table">
<el-table
<<<<<<< HEAD
max-height="650"
ref="prescriptionRef"
:data="prescriptionList"
=======
height="100%"
ref="prescriptionRef"
:data="filterPrescriptionList"
>>>>>>> v1.3
row-key="uniqueKey"
border
@cell-click="clickRow"
@row-dblclick="clickRowDb"
v-loading="loading"
:expand-row-keys="expandOrder"
<<<<<<< HEAD
>
<el-table-column type="expand" width="1" style="width: 0">
<template #default="scope">
<el-form :model="scope.row" :rules="rowRules" :ref="'formRef' + scope.$index">
<div
class="expend_div"
style="padding: 16px; background: #f8f9fa; border-radius: 8px"
>
<template v-if="scope.row.adviceType == 1">
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span class="medicine-title">
{{
scope.row.adviceName +
' ' +
scope.row.volume +
' [' +
Number(scope.row.unitPrice).toFixed(2) +
' 元' +
'/' +
scope.row.unitCode_dictText +
']'
}}
</span>
<!-- <el-form-item prop="conditionDefinitionId">
<el-select
v-model="scope.row.conditionDefinitionId"
style="width: 180px; margin: 0 20px"
placeholder="诊断"
>
<el-option
v-for="item in diagnosisList"
:key="item.conditionId"
:label="item.name"
:value="item.definitionId"
@click="handleDiagnosisChange(item, scope.row)"
/>
</el-select>
</el-form-item> -->
<el-form-item prop="lotNumber" label="药房:">
<el-select
v-model="scope.row.inventoryId"
style="width: 180px; margin-right: 20px"
placeholder="药房"
>
<el-option
v-for="item in scope.row.stockList"
:key="item.inventoryId"
:value="item.inventoryId"
:label="
item.locationName +
' ' +
'批次号: ' +
item.lotNumber +
' ' +
' 库存:' +
stockFormat(
scope.row.partPercent,
scope.row.unitCode_dictText,
scope.row.minUnitCode_dictText,
item.quantity
) +
' 单价:' +
item.price.toFixed(2) +
'/' +
item.unitCode_dictText
"
@click="handleNumberClick(item, scope.$index)"
/>
</el-select>
</el-form-item>
<el-form-item
label="执行次数:"
prop="executeNum"
class="required-field"
data-prop="executeNum"
v-if="scope.row.injectFlag == 1"
>
<el-input-number
:min="1"
v-model="scope.row.executeNum"
controls-position="right"
:controls="false"
:ref="(el) => (inputRefs.executeNum = el)"
@keyup.enter.prevent="handleEnter('executeNum', scope.row, scope.$index)"
style="width: 70px; margin-right: 20px"
/> </el-form-item
>x <span class="medicine-info"> 诊断{{ diagnosisName }} </span>x
<span class="medicine-info"> 皮试{{ scope.row.skinTestFlag_enumText }} </span>
<span class="medicine-info">
注射药品{{ scope.row.injectFlag_enumText }}
</span>
<span class="total-amount">
总金额{{ scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元' }}
</span>
</div>
<div style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap">
<div class="form-group">
<!-- 单次剂量 -->
<el-form-item
label="单次用量:"
prop="doseQuantity"
class="required-field"
data-prop="doseQuantity"
>
<el-input-number
:min="0"
v-model="scope.row.doseQuantity"
controls-position="right"
:controls="false"
style="width: 70px; margin-right: 20px"
:ref="(el) => (inputRefs.doseQuantity = el)"
@input="convertValues(scope.row, scope.$index)"
@keyup.enter.prevent="
handleEnter('doseQuantity', scope.row, scope.$index)
"
/>
</el-form-item>
<!-- 剂量单位 -->
<el-select
v-model="scope.row.minUnitCode"
style="width: 70px; margin-right: 20px"
placeholder=" "
>
<template v-for="item in scope.row.unitCodeList" :key="item.value">
<el-option
v-if="
scope.row.unitCodeList.length == 3
? item.type == unitMap['minUnit']
: item.type == unitMap['unit']
"
:value="item.value"
:label="item.label"
/>
</template>
</el-select>
<span>=</span>
<!-- 单次剂量 -->
<el-form-item prop="dose" class="required-field" data-prop="dose">
<el-input-number
v-model="scope.row.dose"
controls-position="right"
:controls="false"
style="width: 70px; margin: 0 20px"
:ref="(el) => (inputRefs.dose = el)"
@input="convertDoseValues(scope.row, scope.$index)"
@keyup.enter.prevent="handleEnter('dose', scope.row, scope.$index)"
/>
</el-form-item>
<!-- 全部单位 -->
<el-select
v-model="scope.row.doseUnitCode"
style="width: 70px"
placeholder=" "
@change="convertValues(scope.row, scope.$index)"
>
<el-option
v-for="item in scope.row.unitCodeList"
:value="item.value"
:label="item.label"
:key="item.value"
/>
</el-select>
</div>
<div class="form-group">
<el-form-item
label="给药途径:"
prop="methodCode"
class="required-field"
data-prop="methodCode"
>
<el-select
v-model="scope.row.methodCode"
placeholder="给药途径"
clearable
filterable
:ref="(el) => (inputRefs.methodCode = el)"
@keyup.enter.prevent="
() => {
inputRefs.methodCode.blur();
}
"
@visible-change="
(value) => {
if (!value) {
handleEnter('methodCode', scope.row, scope.$index);
}
}
"
>
<el-option
v-for="dict in method_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label="用药频次:"
prop="rateCode"
class="required-field"
data-prop="rateCode"
>
<el-select
v-model="scope.row.rateCode"
placeholder="频次"
style="width: 120px"
filterable
@keyup.enter.prevent="
() => {
inputRefs.rateCode.blur();
}
"
@change="calculateTotalAmount(scope.row, scope.$index)"
@visible-change="
(value) => {
if (!value) {
handleEnter('rateCode', scope.row, scope.$index);
}
}
"
:ref="(el) => (inputRefs.rateCode = el)"
>
<el-option
v-for="dict in rate_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</div>
</div>
<div
style="
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
margin-top: 10px;
"
>
<div class="form-group">
<el-form-item
label="用药天数:"
prop="dispensePerDuration"
class="required-field"
data-prop="dispensePerDuration"
>
<el-input-number
v-model="scope.row.dispensePerDuration"
style="width: 80px"
:min="1"
controls-position="right"
:controls="false"
:ref="(el) => (inputRefs.dispensePerDuration = el)"
@keyup.enter.prevent="
handleEnter('dispensePerDuration', scope.row, scope.$index)
"
>
<template #suffix>天</template>
</el-input-number>
</el-form-item>
<el-form-item
label="总量:"
prop="quantity"
class="required-field"
data-prop="quantity"
>
<el-input-number
v-model="scope.row.quantity"
style="width: 70px"
controls-position="right"
:controls="false"
:ref="(el) => (inputRefs.quantity = el)"
@keyup.enter.prevent="handleEnter('quantity', scope.row, scope.$index)"
@input="calculateTotalPrice(scope.row, scope.$index)"
/>
</el-form-item>
<el-select
v-model="scope.row.unitCode"
style="width: 70px; margin-right: 20px"
placeholder=" "
@change="calculateTotalAmount(scope.row, scope.$index)"
>
<template v-for="item in scope.row.unitCodeList" :key="item.value">
<el-option
v-if="item.type != unitMap['dose']"
:value="item.value"
:label="item.label"
/>
</template>
</el-select>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
确定
</el-button>
</div>
</template>
<template v-else-if="scope.row.adviceType == 2">
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span style="font-size: 16px; font-weight: 600">
{{
scope.row.adviceName +
' ' +
scope.row.volume +
' ' +
scope.row.unitPrice +
' 元/' +
scope.row.unitCode_dictText
}}
</span>
<div class="form-group">
<el-select
v-model="scope.row.lotNumber"
style="width: 180px; margin-right: 20px"
placeholder="药房"
>
<el-option
v-for="item in scope.row.stockList"
:key="item.lotNumber"
:value="item.lotNumber"
:label="
item.locationName +
' ' +
'批次号: ' +
item.lotNumber +
' ' +
' 库存:' +
stockFormat(
scope.row.partPercent,
scope.row.unitCode_dictText,
scope.row.minUnitCode_dictText,
item.quantity
) +
' 单价:' +
item.price.toFixed(2) +
'/' +
item.unitCode_dictText
"
@click="handleNumberClick(item, scope.$index)"
/>
</el-select>
<el-form-item
label="数量:"
prop="quantity"
class="required-field"
data-prop="quantity"
>
<el-input-number
placeholder="数量"
v-model="scope.row.quantity"
style="width: 70px"
controls-position="right"
:controls="false"
@keyup.enter.prevent="handleEnter('quantity', scope.row, scope.$index)"
@input="calculateTotalAmount(scope.row, scope.$index)"
/>
</el-form-item>
<el-select
v-model="scope.row.unitCode"
style="width: 70px; margin-right: 20px"
placeholder=" "
@change="calculateTotalAmount(scope.row, scope.$index)"
>
<template v-for="item in scope.row.unitCodeList" :key="item.value">
<el-option
v-if="item.type != unitMap['dose']"
:value="item.value"
:label="item.label"
@click="
() => {
scope.row.unitCode_dictText = item.label;
}
"
/>
</template>
</el-select>
<span class="total-amount">
总金额:{{
scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元'
}}
</span>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
确定
</el-button>
</div>
</template>
<template v-else>
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span style="font-size: 16px; font-weight: 600">
{{ scope.row.adviceName }}
{{
scope.row.unitPrice
? Number(scope.row.unitPrice).toFixed(2) + '/次'
: '-' + '元'
}}
</span>
<div class="form-group">
<el-form-item
label="执行次数:"
prop="quantity"
class="required-field"
data-prop="quantity"
>
<el-input-number
placeholder="执行次数"
style="width: 100px; margin: 0 20px"
v-model="scope.row.quantity"
controls-position="right"
:controls="false"
@keyup.enter.prevent="handleEnter('quantity', scope.row, scope.$index)"
@input="calculateTotalPrice(scope.row, scope.$index)"
/>
</el-form-item>
<el-form-item
label="执行科室:"
prop="orgId"
class="required-field"
data-prop="orgId"
>
<el-tree-select
clearable
v-model="scope.row.orgId"
style="width: 200px"
:data="organization"
:props="{ value: 'id', label: 'name', children: 'children' }"
value-key="id"
check-strictly
default-expand-all
@change="(value) => handleOrgChange(value, scope.$index)"
placeholder="请选择执行科室"
/>
</el-form-item>
<span class="total-amount">
总金额:{{
scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元'
}}
</span>
<span style="font-size: 16px; font-weight: 600">
<!-- 金额: {{ scope.row.priceList[0].price }} -->
</span>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
确定
</el-button>
</div>
</template>
</div>
</el-form>
</template>
</el-table-column>
<el-table-column label="" align="center" prop="groupId" width="60">
<template #header>
<el-checkbox
v-model="checkAll"
@change="
(value) => {
prescriptionList.forEach((item, index) => {
groupIndexList.push(index);
item.check = value;
});
}
"
/>
</template>
<template #default="scope">
<el-checkbox
v-model="scope.row.check"
@dblclick.stop=""
placeholder=""
@change="(value) => handleCheckBoxChange(value, scope.$index, scope.row)"
/>
</template>
</el-table-column>
<el-table-column label="组" align="center" width="60">
<template #default="scope">
<div v-if="groupMarkers[scope.$index] === '┏'">┏</div>
<div v-if="groupMarkers[scope.$index] === '┗'">┗</div>
<div v-if="groupMarkers[scope.$index] === '┃'">┃</div>
<!-- <div v-if="groupMarkers[scope.$index] === 'all'">┏</div> -->
<!-- <div v-if="groupMarkers[scope.$index] === 'all'">┗</div> -->
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="" width="120">
<template #default="scope">
=======
@select="handleSelectionChange"
>
<el-table-column type="expand" width="1" style="width: 0">
@@ -630,31 +123,20 @@
<el-table-column label="类型" align="center" prop="" width="120">
<template #default="scope">
{{ console.log(scope.row, 1111) }}
>>>>>>> v1.3
<el-radio-group
v-model="scope.row.therapyEnum"
size="small"
v-if="getRowDisabled(scope.row)"
<<<<<<< HEAD
>
<el-radio-button label="长期" value="1" />
<el-radio-button label="临时" value="2" />
=======
@change="(val) => handleTherapyChange(val, scope.row)"
>
<el-radio-button label="1">长期</el-radio-button>
<el-radio-button label="2">临时</el-radio-button>
>>>>>>> v1.3
</el-radio-group>
<span
v-else
:style="scope.row.therapyEnum == '1' ? 'color: #a6745c' : 'color: #3787a5'"
>
<<<<<<< HEAD
{{ scope.row.therapyEnum_enumText }}
=======
{{ scope.row.therapyEnum === '1' ? '长期' : '临时' }}
>>>>>>> v1.3
</span>
</template>
</el-table-column>
@@ -662,11 +144,7 @@
<template #default="scope">
<template v-if="getRowDisabled(scope.row)">
<el-select
<<<<<<< HEAD
style="width: 35%; margin-right: 20px"
=======
style="width: 35%; margin-right: 8px"
>>>>>>> v1.3
v-model="scope.row.adviceType"
:ref="'adviceTypeRef' + scope.$index"
@change="
@@ -676,10 +154,7 @@
adviceQueryParams.adviceType = value;
}
"
<<<<<<< HEAD
=======
clearable
>>>>>>> v1.3
>
<el-option
v-for="item in adviceTypeList"
@@ -710,11 +185,7 @@
<template #reference>
<el-input
:ref="'adviceRef' + scope.$index"
<<<<<<< HEAD
style="width: 50%"
=======
style="width: 62%"
>>>>>>> v1.3
v-model="scope.row.adviceName"
placeholder="请选择项目"
@input="handleChange"
@@ -791,16 +262,6 @@
{{ console.log(scope.row) }}
<span v-if="!scope.row.isEdit && scope.row.adviceType == 1" style="text-align: right">
{{
<<<<<<< HEAD
scope.row.rateCode_dictText
? scope.row.rateCode_dictText +
' ' +
scope.row.dispensePerDuration +
'天' +
' ' +
scope.row.methodCode_dictText
: ''
=======
[
scope.row.rateCode_dictText,
scope.row.dispensePerDuration ? scope.row.dispensePerDuration + '' : '',
@@ -808,7 +269,6 @@
]
.filter(Boolean)
.join(' ')
>>>>>>> v1.3
}}
</span>
</template>
@@ -848,10 +308,6 @@
:diagnosis="diagnosisInfo"
:patientInfo="patientInfo"
@userPrescriptionHistory="handleSaveHistory"
<<<<<<< HEAD
/> -->
<LeaveHospitalDialog ref="leaveHospitalDialogRef" />
=======
/>
<LeaveHospitalDialog
ref="leaveHospitalDialogRef"
@@ -861,7 +317,6 @@
:encounter-diagnosis-id="encounterDiagnosisId"
@success="handleLeaveHospitalSuccess"
/>
>>>>>>> v1.3
<TransferOrganizationDialog ref="transferOrganizationRef" />
</div>
<!-- <el-drawer v-model="openDrawer" size="100%">
@@ -902,12 +357,9 @@ import useUserStore from '@/store/modules/user';
import ApplicationFormBottomBtn from './applicationForm/applicationFormBottomBtn.vue';
import LeaveHospitalDialog from './applicationForm/leaveHospitalDialog.vue';
import TransferOrganizationDialog from './applicationForm/transferOrganizationDialog.vue';
<<<<<<< HEAD
=======
import NursingStatus from '@/views/inpatientDoctor/home/components/applicationShow/nursingStatus.vue';
import OrderForm from './OrderForm.vue';
import { computed, watch } from 'vue';
>>>>>>> v1.3
const emit = defineEmits(['selectDiagnosis']);
const total = ref(0);
const queryParams = ref({});
@@ -1937,18 +1389,6 @@ function handleSingOut() {
// 停嘱
function handleStopAdvice() {
<<<<<<< HEAD
let requestIdList = prescriptionList.value
.filter((item) => {
return item.check;
})
.map((item) => {
return {
requestId: item.requestId,
adviceType: item.adviceType,
};
});
=======
let selectRows = prescriptionRef.value.getSelectionRows();
console.log('selectRows======>', JSON.stringify(selectRows));
if ((selectRows || []).length <= 0) {
@@ -2018,7 +1458,6 @@ function handleStopAdvice() {
adviceType: item.adviceType,
};
});
>>>>>>> v1.3
// if (requestIdList.length == 0) {
// proxy.$modal.msgWarning('仅长期医嘱可停止');
// return;
@@ -2452,25 +1891,9 @@ function sortPrescriptionList() {
}
function handleLeaveHospital() {
<<<<<<< HEAD
proxy.$refs['leaveHospitalDialogRef'].openDialog();
}
function handleTransferOrg() {
proxy.$refs['transferOrganizationRef'].openDialog();
}
// 处理行chexkbox选中
function handleCheckBoxChange(value, index, row) {
// 选中将当前行索引记录下来,取消将当前行索引删除
if (value) {
groupIndexList.value.push(index);
} else {
groupIndexList.value.splice(groupIndexList.value.indexOf(index), 1);
=======
if (!patientInfo.value) {
proxy.$modal.msgWarning('请先选择患者');
return;
>>>>>>> v1.3
}
proxy.$refs['leaveHospitalDialogRef'].openDialog();
}

View File

@@ -5,10 +5,6 @@
-->
<template>
<div class="emr-use-container">
<<<<<<< HEAD
<div class="disBtn" :class="{'disLeftBtnNor':leftShow,'disLeftBtnAct':!leftShow}" @click="disNode"><img src="../../../../assets/icons/svg/foldup.svg"></div>
<div class="disBtn" :class="{'disRightBtnNor':rightShow,'disRightBtnAct':!rightShow}" @click="disNode_R"><img src="../../../../assets/icons/svg/foldup.svg"></div>
=======
<div
class="disBtn"
:class="{ disLeftBtnNor: leftShow, disLeftBtnAct: !leftShow }"
@@ -23,7 +19,6 @@
>
<img src="../../../../assets/icons/svg/foldup.svg" />
</div>
>>>>>>> v1.3
<transition name="el-zoom-in-left">
<div class="template-tree-container" v-if="leftShow">
<div class="search-box">
@@ -35,15 +30,6 @@
</div>
<el-scrollbar class="template-tree-scrollbar">
<el-tree
<<<<<<< HEAD
ref="templateTree"
:data="templateData"
:props="defaultProps"
auto-expand-parent
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
=======
ref="templateTree"
:data="templateData"
:props="defaultProps"
@@ -51,7 +37,6 @@
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
>>>>>>> v1.3
></el-tree>
</el-scrollbar>
</div>
@@ -91,31 +76,18 @@
<el-tabs v-model="quicklyactiveName" type="card">
<el-tab-pane label="历史" name="history">
<History
<<<<<<< HEAD
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
=======
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
:selectedRecordId="selectedHistoryRecordId"
>>>>>>> v1.3
/>
</el-tab-pane>
<el-tab-pane label="模版" name="model">
<Template
<<<<<<< HEAD
@templateClick="handleTemplateClick"
ref="templateRef"
v-model:definitionId="currentSelectTemplate.id"
@edit="templateEdit"
=======
@templateClick="handleTemplateClick"
ref="templateRef"
v-model:definitionId="currentSelectTemplate.id"
@edit="templateEdit"
>>>>>>> v1.3
/>
</el-tab-pane>
</el-tabs>
@@ -176,9 +148,6 @@ const emrComponentRef = ref(null);
const quicklyactiveName = ref('history');
const leftShow = ref(true);
const rightShow = ref(true);
<<<<<<< HEAD
=======
watch(patientInfo, () => {
historyRef.value?.queryList();
templateRef.value?.queryList();
@@ -187,7 +156,6 @@ const templateTree = ref(null);
// 当前选中的历史病历ID用于在History组件中高亮显示
const selectedHistoryRecordId = ref('');
>>>>>>> v1.3
// 树配置(模板树)
const defaultProps = {
@@ -790,17 +758,10 @@ defineExpose({ state });
const disNode = () => {
leftShow.value = !leftShow.value;
<<<<<<< HEAD
}
const disNode_R = () => {
rightShow.value = !rightShow.value;
}
=======
};
const disNode_R = () => {
rightShow.value = !rightShow.value;
};
>>>>>>> v1.3
</script>
<style lang="scss" scoped>
.emr-use-container {
@@ -827,11 +788,7 @@ const disNode_R = () => {
height: 60px;
z-index: 1111;
img {
<<<<<<< HEAD
transform: rotate(-90deg) ;
=======
transform: rotate(-90deg);
>>>>>>> v1.3
}
}
.disLeftBtnAct {

View File

@@ -3,18 +3,6 @@
* @Date: 2025-04-07 12:58:22
* @Description:
*/
<<<<<<< HEAD
import PatientList from './components/patientList.vue'
import PatientCard from './components/patientCard/index.vue'
import Advice from './components/order/index.vue'
import Diagnose from './components/diagnosis/diagnosis.vue'
import BloodTtransfusionAapplication from './components/applicationShow/bloodTtransfusionAapplication.vue'
import ExamineApplication from './components/applicationShow/examineApplication.vue'
import SurgeryApplication from './components/applicationShow/surgeryApplication.vue'
import TestApplication from './components/applicationShow/testApplication.vue'
import NursingStatus from './components/applicationShow/nursingStatus.vue'
export { PatientList, PatientCard, Advice,Diagnose, BloodTtransfusionAapplication, ExamineApplication, SurgeryApplication, TestApplication, NursingStatus }
=======
import Advice from './components/order/index.vue';
import Diagnose from './components/diagnosis/diagnosis.vue';
import BloodTtransfusionAapplication from './components/applicationShow/bloodTtransfusionAapplication.vue';
@@ -33,4 +21,3 @@ export {
NursingStatus,
ReportQuery,
};
>>>>>>> v1.3

View File

@@ -15,17 +15,7 @@
<el-tab-pane label="临床医嘱" name="prescription">
<Advice ref="adviceRef" />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="诊断录入" name="diagnosis">
<Diagnose ref="diagnosisRef" :patientInfo="patientInfo" />
</el-tab-pane>
<el-tab-pane label="住院病历" name="inhospitalEmr">
<Emr ref="inhospitalEmrRef"/>
</el-tab-pane>
<el-tab-pane label="医技报告" name="fourth">Task</el-tab-pane>
=======
<!-- <el-tab-pane label="医技报告" name="fourth">Task</el-tab-pane> -->
>>>>>>> v1.3
<el-tab-pane label="检验申请" name="test">
<TestApplication ref="testApplicationRef" />
</el-tab-pane>
@@ -38,18 +28,12 @@
<el-tab-pane label="输血申请" name="blood">
<BloodTtransfusionAapplication ref="bloodTtransfusionAapplicationRef" />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="护理状态" name="nursing">
<NursingStatus />
</el-tab-pane>
=======
<el-tab-pane label="报告查询" name="report">
<ReportQuery />
</el-tab-pane>
<!-- <el-tab-pane label="护理状态" name="nursing">
<NursingStatus />
</el-tab-pane> -->
>>>>>>> v1.3
</el-tabs>
</el-main>
</el-container>
@@ -57,15 +41,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref } from 'vue';
// const { proxy } = getCurrentInstance()
// const emits = defineEmits([])
// const props = defineProps({})
import Emr from './emr/index.vue';
import inPatientBarDoctorFold from '@/components/patientBar/inPatientBarDoctorFold.vue';
=======
>>>>>>> v1.3
import {
getCurrentInstance,
onBeforeMount,
@@ -90,10 +65,7 @@ import {
SurgeryApplication,
TestApplication,
NursingStatus,
<<<<<<< HEAD
=======
ReportQuery,
>>>>>>> v1.3
} from './index.js';
const state = reactive({});
onBeforeMount(() => {});

Some files were not shown because too many files have changed in this diff Show More