fix(database): 修复数据库字典重复和表结构缺失问题
- 删除手术状态下拉框的重复字典数据,保留每组中dict_code最小的记录 - 修复HisBaseEntity列缺失问题,为多个表添加create_by、update_by、update_time等基础字段 - 为adm_patient表添加邮政编码、户籍地址、监护人信息、患者来源等缺失字段 - 添加文化程度字典类型和相关字典数据,补充3919到3914等10个学历级别选项 - 为adm_patient_identifier表创建tenant_id和patient_id的联合索引以提升查询性能 - 修复prescription_intercept_log和clinical_pathway_execution表的基础实体字段缺失 - 为wor_device_request表增加医嘱退回相关的back_reason、performer_check_id等字段 - 创建EMPI核心表empi_person和empi_person_id_mapping用于全局患者主
@@ -47,7 +47,7 @@
|
||||
|
||||
**铁律2: Flyway 数据库迁移**
|
||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
||||
- 路径:`healthlink-his-application/src/main/resources/db/migration/`
|
||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
||||
|
||||
**铁律3: 测试通过后才提交**
|
||||
@@ -184,7 +184,7 @@
|
||||
|
||||
**铁律2: Flyway 数据库迁移**
|
||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
||||
- 路径:`healthlink-his-application/src/main/resources/db/migration/`
|
||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
||||
|
||||
**铁律3: 测试通过后才提交**
|
||||
|
||||
2
RULES.md
@@ -40,7 +40,7 @@
|
||||
|
||||
**铁律2: Flyway 数据库迁移**
|
||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
||||
- 路径:`healthlink-his-application/src/main/resources/db/migration/`
|
||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
||||
|
||||
**铁律3: 测试通过后才提交**
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
**铁律2: Flyway 数据库迁移**
|
||||
- 凡是新建表、新增字段,必须创建 Flyway 迁移脚本
|
||||
- 路径:`healthlink-his-domain/src/main/resources/db/migration/`
|
||||
- 路径:`healthlink-his-application/src/main/resources/db/migration/`
|
||||
- 命名:`V{版本号}__{描述}.sql`(双下划线)
|
||||
|
||||
**铁律3: 测试通过后才提交**
|
||||
|
||||
@@ -6,3 +6,9 @@ export function getDefects(encounterId) { return request({ url: "/api/v1/emr-qua
|
||||
export function getDefectStatistics() { return request({ url: "/api/v1/emr-quality/defect-statistics", method: "get" }) }
|
||||
export function getCompletionRate() { return request({ url: "/api/v1/emr-quality/completion-rate", method: "get" }) }
|
||||
export function getQualityStatistics(params) { return request({ url: "/api/v1/emr-quality/defect-statistics", method: "get", params }) }
|
||||
|
||||
// 终末质控
|
||||
export function runTerminalCheck(encounterId) { return request({ url: "/api/v1/quality/terminal/check/" + encounterId, method: "post" }) }
|
||||
export function getTerminalResults(encounterId) { return request({ url: "/api/v1/quality/terminal/results/" + encounterId, method: "get" }) }
|
||||
export function startDefectRectify(defectId) { return request({ url: "/api/v1/emr-quality/defect/rectify/" + defectId, method: "post" }) }
|
||||
export function completeDefectRectify(defectId) { return request({ url: "/api/v1/emr-quality/defect/complete/" + defectId, method: "post" }) }
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M768 192H256c-35.2 0-64 28.8-64 64v576c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64V256c0-35.2-28.8-64-64-64z m-64 576H320V320h384v448z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64H384z m0 128h192v64H384z m0 128h128v64H384z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M768 128H256c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64V192c0-35.2-28.8-64-64-64z m0 64v64H256V192h512z" fill="currentColor"/>
|
||||
<path d="M320 320h384v64H320z" fill="currentColor"/>
|
||||
<path d="M320 448h384v64H320z" fill="currentColor"/>
|
||||
<path d="M320 576h384v64H320z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 349 B After Width: | Height: | Size: 416 B |
@@ -1,4 +1,7 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M640 128H384c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h256c35.2 0 64-28.8 64-64V192c0-35.2-28.8-64-64-64z m-64 640H448V256h128v512z" fill="currentColor"/>
|
||||
<path d="M480 320h64v128h-64z m-64 192h192v64H416z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M768 128H256c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64V192c0-35.2-28.8-64-64-64z m0 64v64H256V192h512z" fill="currentColor"/>
|
||||
<path d="M320 320h384v64H320z" fill="currentColor"/>
|
||||
<path d="M320 448h384v64H320z" fill="currentColor"/>
|
||||
<path d="M320 576h384v64H320z" fill="currentColor"/>
|
||||
<path d="M320 704h384v64H320z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 471 B |
@@ -1,4 +1,7 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M832 192H192c-35.2 0-64 28.8-64 64v512c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64V256c0-35.2-28.8-64-64-64z m-64 512H256V320h512v384z" fill="currentColor"/>
|
||||
<path d="M320 384h128v128H320z m256 0h128v128H576z m-256 192h128v64H320z m256 0h128v64H576z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 592 B |
@@ -1 +1,7 @@
|
||||
<svg width="128" height="96" xmlns="http://www.w3.org/2000/svg"><path d="M64.125 56.975L120.188.912A12.476 12.476 0 0 0 115.5 0h-103c-1.588 0-3.113.3-4.513.838l56.138 56.137z"/><path d="M64.125 68.287l-62.3-62.3A12.42 12.42 0 0 0 0 12.5v71C0 90.4 5.6 96 12.5 96h103c6.9 0 12.5-5.6 12.5-12.5v-71a12.47 12.47 0 0 0-1.737-6.35L64.125 68.287z"/></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 592 B |
@@ -1,4 +1,7 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 64C262.4 64 64 262.4 64 512s198.4 448 448 448 448-198.4 448-448S761.6 64 512 64z m0 768c-176.8 0-320-143.2-320-320s143.2-320 320-320 320 143.2 320 320-143.2 320-320 320z" fill="currentColor"/>
|
||||
<path d="M480 352h64v192h-64z m0 256h64v64h-64z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 367 B After Width: | Height: | Size: 592 B |
@@ -1,4 +1,7 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 64L128 256v256c0 224 144 416 384 448 240-32 384-224 384-448V256L512 64z m0 832c-176-32-288-192-288-384V288l288-160 288 160v224c0 192-112 352-288 384z" fill="currentColor"/>
|
||||
<path d="M480 320h64v256h-64z m0 320h64v64h-64z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 347 B After Width: | Height: | Size: 592 B |
@@ -1,4 +1,7 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M832 256H192c-35.2 0-64 28.8-64 64v512c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64V320c0-35.2-28.8-64-64-64z m-64 512H256V384h512v384z" fill="currentColor"/>
|
||||
<path d="M320 416h128v64H320z m256 0h128v64H576z m-256 128h128v64H320z m256 0h128v64H576z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 371 B After Width: | Height: | Size: 592 B |
@@ -1,4 +1,5 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M768 192H256c-35.2 0-64 28.8-64 64v512c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64V256c0-35.2-28.8-64-64-64z m-64 512H320V320h384v384z" fill="currentColor"/>
|
||||
<path d="M384 416h256v64H384z m0 128h192v64H384z m0 128h128v64H384z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M448 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h192v64h-192z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 349 B After Width: | Height: | Size: 481 B |
@@ -1 +1,7 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M119.88 49.674h-7.987V39.52C111.893 17.738 90.45.08 63.996.08 37.543.08 16.1 17.738 16.1 39.52v10.154H8.113c-4.408 0-7.987 2.94-7.987 6.577v65.13c0 3.637 3.57 6.577 7.987 6.577H119.88c4.407 0 7.987-2.94 7.987-6.577v-65.13c-.008-3.636-3.58-6.577-7.987-6.577zm-23.953 0H32.065V39.52c0-14.524 14.301-26.295 31.931-26.295 17.63 0 31.932 11.777 31.932 26.295v10.153z"/></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 444 B After Width: | Height: | Size: 592 B |
@@ -1,3 +1,7 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg t="1566035943711" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4805"
|
||||
width="200" height="200"><defs><style type="text/css"></style></defs><path d="M208.736 566.336H64.384v59.328h144.352v-59.328z m0-336.096H165.44V74.592c0-7.968 4.896-14.848 10.464-14.848h502.016V0.448H175.936c-38.72 1.248-69.248 34.368-68.192 74.144v155.648H64.384V289.6h144.352V230.24z m0 168.096H64.384v59.328h144.352v-59.328z m714.656 76.576h-57.76v474.496c0 7.936-4.896 14.848-10.464 14.848H175.936c-5.568 0-10.464-6.912-10.464-14.848v-155.68h43.296v-59.296H64.384v59.296h43.328v155.68c-1.024 39.776 29.472 72.896 68.192 74.144h679.232c38.72-1.184 69.248-34.368 68.256-74.144V474.912z m14.944-290.336l-83.072-85.312a71.264 71.264 0 0 0-52.544-21.728 71.52 71.52 0 0 0-51.616 23.872L386.528 507.264a30.496 30.496 0 0 0-6.176 10.72L308.16 740.512a30.016 30.016 0 0 0 6.976 30.24c7.712 7.968 19.2 10.752 29.568 7.2l216.544-74.112a28.736 28.736 0 0 0 12.128-7.936L940.448 287.456a75.552 75.552 0 0 0-2.112-102.88z m-557.12 518.272l39.104-120.64 78.336 80.416-117.44 40.224z m170.048-70.016l-103.552-106.016 200.16-222.4 103.52 106.304-200.128 222.112zM897.952 247.072l-0.256 0.224-107.136 119.168-103.52-106.528 106.432-118.624a14.144 14.144 0 0 1 10.304-4.736 13.44 13.44 0 0 1 10.464 4.288l83.264 85.696c5.472 5.6 5.664 14.72 0.448 20.512z" p-id="4806"></path></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 592 B |
@@ -1 +1,6 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 20.967v59.59c0 11.59 8.537 20.966 19.075 20.966h28.613l1 26.477L76.8 101.523h32.125c10.538 0 19.075-9.377 19.075-20.966v-59.59C128 9.377 119.463 0 108.925 0h-89.85C8.538 0 0 9.377 0 20.967zm82.325 33.1c0-5.524 4.013-9.935 9.037-9.935 5.026 0 9.038 4.41 9.038 9.934 0 5.524-4.025 9.934-9.038 9.934-5.024 0-9.037-4.41-9.037-9.934zm-27.613 0c0-5.524 4.013-9.935 9.038-9.935s9.037 4.41 9.037 9.934c0 5.524-4.025 9.934-9.037 9.934-5.025 0-9.038-4.41-9.038-9.934zm-27.1 0c0-5.524 4.013-9.935 9.038-9.935s9.038 4.41 9.038 9.934c0 5.524-4.026 9.934-9.05 9.934-5.013 0-9.025-4.41-9.025-9.934z"/></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 448h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 576h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 538 B |
@@ -1,3 +1,6 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg t="1575802846045" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2750"
|
||||
width="200" height="200"><defs><style type="text/css"></style></defs><path d="M868.593046 403.832442c-30.081109-28.844955-70.037123-44.753273-112.624057-44.753273L265.949606 359.079168c-42.554188 0-82.510202 15.908318-112.469538 44.690852-30.236652 28.782533-46.857191 67.222007-46.857191 108.198258l0 294.079782c0 40.977273 16.619516 79.414701 46.702672 108.136859 29.959336 28.844955 70.069869 44.814672 112.624057 44.814672l490.019383 0c42.585911 0 82.696444-15.969717 112.624057-44.814672 30.082132-28.844955 46.579875-67.222007 46.579875-108.136859L915.172921 511.968278C915.171897 471.053426 898.675178 432.677397 868.593046 403.832442zM841.821309 806.049083c0 22.098297-8.882298 42.772152-25.099654 58.306964-16.154935 15.661701-37.81935 24.203238-60.752666 24.203238L265.949606 888.559285c-22.934339 0-44.567032-8.54256-60.877509-24.264637-16.186657-15.474436-25.067932-36.148291-25.067932-58.246589L180.004165 511.968278c0-22.035876 8.881274-42.772152 25.192775-58.307987 16.186657-15.536858 37.81935-24.139793 60.753689-24.139793l490.019383 0c22.933315 0 44.597731 8.602935 60.752666 24.139793 16.21838 15.535835 25.099654 36.272112 25.099654 58.307987L841.822332 806.049083zM510.974136 135.440715c114.914216 0 208.318536 89.75214 208.318536 200.055338l73.350588 0c0-149.113109-126.366036-270.496667-281.669124-270.496667-155.333788 0-281.699824 121.383558-281.699824 270.496667l73.350588 0C302.623877 225.193879 396.059919 135.440715 510.974136 135.440715zM474.299865 747.244792l73.350588 0L547.650453 629.576859l-73.350588 0L474.299865 747.244792z" p-id="2751"></path></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 448h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 576h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 538 B |
@@ -1,5 +1,6 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M736 288H288c-17.68 0-32 14.32-32 32v416c0 17.68 14.32 32 32 32h448c17.68 0 32-14.32 32-32v-416c0-17.68-14.32-32-32-32z m-64 384H352V384h320v288z" fill="currentColor"/>
|
||||
<path d="M480 192h64v224h-64z m-128 0h64v224h-64z m256 0h64v224h-64z" fill="currentColor"/>
|
||||
<path d="M544 64h-64c-17.68 0-32 14.32-32 32v64h-64c-17.68 0-32 14.32-32 32v64h320v-64c0-17.68-14.32-32-32-32h-64v-64c0-17.68-14.32-32-32-32z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 448h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 576h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 526 B After Width: | Height: | Size: 538 B |
@@ -1,3 +1,7 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg t="1567417214476" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2266"
|
||||
width="200" height="200"><defs><style type="text/css"></style></defs><path d="M761.503029 2.90619 242.121921 2.90619c-32.405037 0-58.932204 26.060539-58.932204 58.527998l0 902.302287c0 32.156374 26.217105 58.216913 58.932204 58.216913l519.381108 0c32.344662 0 58.591443-26.060539 58.591443-58.216913L820.094472 61.123103C820.094472 28.966729 793.847691 2.90619 761.503029 2.90619M452.878996 61.123103l98.147344 0c6.780427 0 12.31549 5.536087 12.31549 12.253068 0 6.748704-5.535063 12.253068-12.31549 12.253068l-98.147344 0c-6.779404 0-12.345166-5.504364-12.345166-12.253068C440.532807 66.659189 446.099592 61.123103 452.878996 61.123103M501.641583 980.593398c-29.636994 0-53.987588-23.946388-53.987588-53.677527 0-29.356608 24.039509-53.614082 53.987588-53.614082 29.91738 0 53.987588 23.883967 53.987588 53.614082C555.629171 956.647009 531.559986 980.593398 501.641583 980.593398M766.35657 803.142893c0 16.23373-13.186324 29.107945-29.233811 29.107945l-470.618521 0c-16.35755 0-29.325909-13.186324-29.325909-29.107945L237.178329 163.500794c0-16.232706 13.279445-29.138644 29.325909-29.138644l470.246037 0c16.420995 0 29.357632 13.1853 29.357632 29.138644l0 639.642099L766.35657 803.142893zM766.35657 803.142893" p-id="2267"></path></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 592 B |
@@ -1,4 +1,8 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M704 128H320c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V192c0-35.2-28.8-64-64-64z m-64 640H384V256h256v512z" fill="currentColor"/>
|
||||
<path d="M416 320h192v64H416z m0 128h192v64H416z m0 128h128v64H416z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 640h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 349 B After Width: | Height: | Size: 648 B |
@@ -1,4 +1,6 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M704 64H320c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z m-64 768H384V192h256v640z" fill="currentColor"/>
|
||||
<path d="M416 256h192v64H416z m0 128h192v64H416z m0 128h128v64H416z m0 128h128v64H416z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 448h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 576h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 367 B After Width: | Height: | Size: 538 B |
@@ -1,4 +1,6 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg t="1547360688278" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="6717"
|
||||
width="200" height="200"><defs><style type="text/css"></style></defs><path d="M890 120H134a70 70 0 0 0-70 70v500a70 70 0 0 0 70 70h756a70 70 0 0 0 70-70V190a70 70 0 0 0-70-70z m-10 520a40 40 0 0 1-40 40H712V448a40 40 0 0 0-80 0v232h-80V368a40 40 0 0 0-80 0v312h-80V512a40 40 0 0 0-80 0v168H184a40 40 0 0 1-40-40V240a40 40 0 0 1 40-40h656a40 40 0 0 1 40 40zM696 824H328a40 40 0 0 0 0 80h368a40 40 0 0 0 0-80z" p-id="6718"></path></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 448h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 576h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 710 B After Width: | Height: | Size: 538 B |
@@ -1 +1,6 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M70.66 4.328l14.01 29.693c1.088 2.29 3.177 3.882 5.603 4.25l31.347 4.76c6.087.926 8.528 8.756 4.117 13.247L103.05 79.395c-1.75 1.78-2.544 4.352-2.132 6.867l5.352 32.641c1.043 6.337-5.33 11.182-10.778 8.19l-28.039-15.409a7.13 7.13 0 0 0-6.91 0l-28.039 15.41c-5.448 2.99-11.821-1.854-10.777-8.19l5.352-32.642c.415-2.515-.387-5.088-2.136-6.867L2.264 56.278C-2.146 51.787.286 43.957 6.38 43.031l31.343-4.76c2.419-.368 4.51-1.96 5.595-4.25L57.334 4.328c2.728-5.77 10.605-5.77 13.325 0z"/></svg>
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 448h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 576h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 563 B After Width: | Height: | Size: 538 B |
@@ -1,4 +1,6 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M736 256H288c-35.2 0-64 28.8-64 64v416c0 35.2 28.8 64 64 64h448c35.2 0 32-28.8 32-64V320c0-35.2-3.2-64-32-64z m-64 384H352V384h320v256z" fill="currentColor"/>
|
||||
<path d="M384 416h256v64H384z m0 128h192v64H384z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 329 B After Width: | Height: | Size: 536 B |
@@ -1,4 +1,7 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M896 192H128c-35.2 0-64 28.8-64 64v576c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64V256c0-35.2-28.8-64-64-64z m-64 576H192V320h640v448z" fill="currentColor"/>
|
||||
<path d="M320 416h128v64h-128z m256 0h128v64h-128z m-256 128h128v64h-128z m256 0h128v64h-128z m-256 128h128v64h-128z m256 0h128v64h-128z" fill="currentColor"/>
|
||||
</svg>
|
||||
<path d="M512 128c-211.2 0-384 172.8-384 384 0 106.24 43.52 202.24 113.92 271.36L256 896h512l-85.33-112.64C769.28 714.24 812.8 618.24 812.8 512c0-211.2-172.8-384-384-384z m0 576c-106.24 0-192-85.76-192-192s85.76-192 192-192 192 85.76 192 192-85.76 192-192 192z" fill="currentColor"/>
|
||||
<path d="M384 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M576 320h64v384h-64z" fill="currentColor"/>
|
||||
<path d="M384 384h256v64h-256z" fill="currentColor"/>
|
||||
<path d="M384 512h256v64h-256z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 418 B After Width: | Height: | Size: 592 B |
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
日,允许的通配符[, - * ? / L W]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
不指定
|
||||
</el-radio>
|
||||
@@ -18,7 +20,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
周期从
|
||||
<el-input-number
|
||||
@@ -36,7 +39,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
从
|
||||
<el-input-number
|
||||
@@ -54,7 +58,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="5"
|
||||
v-model="radioValue"
|
||||
:value="5"
|
||||
>
|
||||
每月
|
||||
<el-input-number
|
||||
@@ -67,7 +72,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="6"
|
||||
v-model="radioValue"
|
||||
:value="6"
|
||||
>
|
||||
本月最后一天
|
||||
</el-radio>
|
||||
@@ -75,7 +81,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="7"
|
||||
v-model="radioValue"
|
||||
:value="7"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -101,7 +108,7 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
@@ -109,7 +116,7 @@ const props = defineProps({
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: "",
|
||||
}
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
小时,允许的通配符[, - * /]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
周期从
|
||||
<el-input-number
|
||||
@@ -28,7 +30,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
从
|
||||
<el-input-number
|
||||
@@ -46,7 +49,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -73,7 +77,7 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
@@ -81,7 +85,7 @@ const props = defineProps({
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: "",
|
||||
}
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
分钟,允许的通配符[, - * /]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
周期从
|
||||
<el-input-number
|
||||
@@ -28,7 +30,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
从
|
||||
<el-input-number
|
||||
@@ -46,7 +49,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -72,7 +76,7 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
@@ -80,7 +84,7 @@ const props = defineProps({
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: "",
|
||||
}
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
月,允许的通配符[, - * /]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
周期从
|
||||
<el-input-number
|
||||
@@ -28,7 +30,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
从
|
||||
<el-input-number
|
||||
@@ -46,7 +49,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -73,7 +77,7 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
@@ -81,7 +85,7 @@ const props = defineProps({
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: "",
|
||||
}
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
秒,允许的通配符[, - * /]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
周期从
|
||||
<el-input-number
|
||||
@@ -28,7 +30,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
从
|
||||
<el-input-number
|
||||
@@ -46,7 +49,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -73,7 +77,7 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
@@ -81,7 +85,7 @@ const props = defineProps({
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: "",
|
||||
}
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
周,允许的通配符[, - * ? / L #]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
不指定
|
||||
</el-radio>
|
||||
@@ -18,7 +20,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
周期从
|
||||
<el-select
|
||||
@@ -55,7 +58,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
第
|
||||
<el-input-number
|
||||
@@ -79,7 +83,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="5"
|
||||
v-model="radioValue"
|
||||
:value="5"
|
||||
>
|
||||
本月最后一个
|
||||
<el-select
|
||||
@@ -98,7 +103,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="6"
|
||||
v-model="radioValue"
|
||||
:value="6"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -126,15 +132,15 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
day: "*",
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: ""
|
||||
}
|
||||
year: "",
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="1"
|
||||
v-model="radioValue"
|
||||
:value="1"
|
||||
>
|
||||
不填,允许的通配符[, - * /]
|
||||
</el-radio>
|
||||
@@ -10,7 +11,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="2"
|
||||
v-model="radioValue"
|
||||
:value="2"
|
||||
>
|
||||
每年
|
||||
</el-radio>
|
||||
@@ -18,7 +20,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="3"
|
||||
v-model="radioValue"
|
||||
:value="3"
|
||||
>
|
||||
周期从
|
||||
<el-input-number
|
||||
@@ -36,7 +39,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="4"
|
||||
v-model="radioValue"
|
||||
:value="4"
|
||||
>
|
||||
从
|
||||
<el-input-number
|
||||
@@ -54,7 +58,8 @@
|
||||
|
||||
<el-form-item>
|
||||
<el-radio
|
||||
v-model="radioValue" :value="5"
|
||||
v-model="radioValue"
|
||||
:value="5"
|
||||
>
|
||||
指定
|
||||
<el-select
|
||||
@@ -81,15 +86,15 @@ const emit = defineEmits(['update'])
|
||||
const props = defineProps({
|
||||
cron: {
|
||||
type: Object,
|
||||
default: {
|
||||
default: () => ({
|
||||
second: "*",
|
||||
min: "*",
|
||||
hour: "*",
|
||||
day: "*",
|
||||
month: "*",
|
||||
week: "?",
|
||||
year: ""
|
||||
}
|
||||
year: "",
|
||||
})
|
||||
},
|
||||
check: {
|
||||
type: Function,
|
||||
|
||||
@@ -1,22 +1,61 @@
|
||||
<template>
|
||||
<el-dialog :title="title" v-model="visible" :width="width" teleported @close="handleClose">
|
||||
<el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="headers" :action="uploadUrl" :disabled="isUploading" :on-progress="handleProgress" :on-change="handleFileChange" :on-remove="handleFileRemove" :on-success="handleSuccess" :auto-upload="false" drag>
|
||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="title"
|
||||
:width="width"
|
||||
teleported
|
||||
@close="handleClose"
|
||||
>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
:limit="1"
|
||||
accept=".xlsx, .xls"
|
||||
:headers="headers"
|
||||
:action="uploadUrl"
|
||||
:disabled="isUploading"
|
||||
:on-progress="handleProgress"
|
||||
:on-change="handleFileChange"
|
||||
:on-remove="handleFileRemove"
|
||||
:on-success="handleSuccess"
|
||||
:auto-upload="false" drag
|
||||
>
|
||||
<el-icon class="el-icon--upload">
|
||||
<upload-filled />
|
||||
</el-icon>
|
||||
<div class="el-upload__text">
|
||||
将文件拖到此处,或<em>点击上传</em>
|
||||
</div>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip text-center">
|
||||
<div class="el-upload__tip">
|
||||
<el-checkbox v-model="updateSupport"> {{ updateSupportLabel }} </el-checkbox>
|
||||
<el-checkbox v-model="updateSupport">
|
||||
{{ updateSupportLabel }}
|
||||
</el-checkbox>
|
||||
</div>
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
<el-link v-if="templateUrl" type="primary" underline="never" style="font-size: 12px; vertical-align: baseline" @click="handleDownloadTemplate">下载模板</el-link>
|
||||
<el-link
|
||||
v-if="templateUrl"
|
||||
type="primary"
|
||||
underline="never"
|
||||
style="font-size: 12px; vertical-align: baseline"
|
||||
@click="handleDownloadTemplate"
|
||||
>
|
||||
下载模板
|
||||
</el-link>
|
||||
</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="handleSubmit">确 定</el-button>
|
||||
<el-button @click="visible = false">取 消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleSubmit"
|
||||
>
|
||||
确 定
|
||||
</el-button>
|
||||
<el-button @click="visible = false">
|
||||
取 消
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<div class="upload-file">
|
||||
<el-upload
|
||||
multiple
|
||||
ref="fileUpload"
|
||||
multiple
|
||||
:action="uploadFileUrl"
|
||||
:before-upload="handleBeforeUpload"
|
||||
:file-list="fileList"
|
||||
|
||||
@@ -1,42 +1,72 @@
|
||||
<template>
|
||||
<div class="patientList-container" :class="{ 'patientList-container-unexpand': !currentExpand }">
|
||||
<div
|
||||
class="patientList-container"
|
||||
:class="{ 'patientList-container-unexpand': !currentExpand }"
|
||||
>
|
||||
<div
|
||||
v-if="currentExpand"
|
||||
class="patientList-operate"
|
||||
:class="{ 'patientList-operate-unexpand': !currentExpand }"
|
||||
v-if="currentExpand"
|
||||
>
|
||||
<el-input
|
||||
v-model="searchKeyword"
|
||||
class="patientList-search-input"
|
||||
placeholder="床号/住院号/姓名"
|
||||
v-model="searchKeyword"
|
||||
@keyup.enter="handleSearch"
|
||||
:prefix-icon="Search"
|
||||
@keyup.enter="handleSearch"
|
||||
/>
|
||||
<el-button class="icon-btn" circle @click="handleRefresh" link plain>
|
||||
<el-icon icon-class="Refresh" size="24" :class="{ 'is-rotating': refreshing }">
|
||||
<el-button
|
||||
class="icon-btn"
|
||||
circle
|
||||
link
|
||||
plain
|
||||
@click="handleRefresh"
|
||||
>
|
||||
<el-icon
|
||||
icon-class="Refresh"
|
||||
size="24"
|
||||
:class="{ 'is-rotating': refreshing }"
|
||||
>
|
||||
<Refresh />
|
||||
</el-icon>
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<transition name="patient-list-toggle" mode="out-in">
|
||||
<div key="expanded" class="patientList-list" v-if="currentExpand">
|
||||
<div class="patient-cards" v-loading="isLoading">
|
||||
<transition
|
||||
name="patient-list-toggle"
|
||||
mode="out-in"
|
||||
>
|
||||
<div
|
||||
v-if="currentExpand"
|
||||
key="expanded"
|
||||
class="patientList-list"
|
||||
>
|
||||
<div
|
||||
v-loading="isLoading"
|
||||
class="patient-cards"
|
||||
>
|
||||
<template v-if="filteredCardData && filteredCardData.length > 0">
|
||||
<el-scrollbar ref="expandScrollbarRef" class="patient-cards-scrollbar">
|
||||
<el-scrollbar
|
||||
ref="expandScrollbarRef"
|
||||
class="patient-cards-scrollbar"
|
||||
>
|
||||
<div
|
||||
class="patient-card"
|
||||
v-for="item in filteredCardData"
|
||||
:key="item.encounterId"
|
||||
:id="item.encounterId"
|
||||
@click="handleItemClick(item)"
|
||||
:key="item.encounterId"
|
||||
class="patient-card"
|
||||
:class="{ actived: activeCardId === item.encounterId }"
|
||||
@click="handleItemClick(item)"
|
||||
>
|
||||
<div class="patient-card-header">
|
||||
<!-- 第1行:姓名 -->
|
||||
<div class="info-row name-row">
|
||||
<div class="name">
|
||||
<el-text :text="item.patientName" class="name" :truncated="true">
|
||||
<el-text
|
||||
:text="item.patientName"
|
||||
class="name"
|
||||
:truncated="true"
|
||||
>
|
||||
{{ item.patientName || '-' }}
|
||||
</el-text>
|
||||
</div>
|
||||
@@ -57,7 +87,10 @@
|
||||
</div>
|
||||
|
||||
<!-- 入院状态放在性别年龄旁边 -->
|
||||
<div class="status-inline" v-if="item.statusEnum_enumText">
|
||||
<div
|
||||
v-if="item.statusEnum_enumText"
|
||||
class="status-inline"
|
||||
>
|
||||
<el-tag
|
||||
size="small"
|
||||
class="payer-tag-status"
|
||||
@@ -72,8 +105,15 @@
|
||||
<!-- 第3行:房间号-分床状态 -->
|
||||
<div class="info-row room-bed-row">
|
||||
<div class="bed-info">
|
||||
<div v-if="item.houseName" class="house-name">{{ item.houseName }}</div>
|
||||
<div class="bed-name">{{ item.bedName || '未分床' }}</div>
|
||||
<div
|
||||
v-if="item.houseName"
|
||||
class="house-name"
|
||||
>
|
||||
{{ item.houseName }}
|
||||
</div>
|
||||
<div class="bed-name">
|
||||
{{ item.bedName || '未分床' }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -83,7 +123,10 @@
|
||||
</div>
|
||||
|
||||
<!-- 第5行:居民保险类型 -->
|
||||
<div class="info-row insurance-row" v-if="item.contractName">
|
||||
<div
|
||||
v-if="item.contractName"
|
||||
class="info-row insurance-row"
|
||||
>
|
||||
<el-tag
|
||||
size="small"
|
||||
class="payer-tag"
|
||||
@@ -100,7 +143,11 @@
|
||||
<div class="personal-info-container">
|
||||
<div class="name-container">
|
||||
<div class="name">
|
||||
<el-text :text="item.patientName" tclass="name" width="auto">
|
||||
<el-text
|
||||
:text="item.patientName"
|
||||
tclass="name"
|
||||
width="auto"
|
||||
>
|
||||
{{ item.patientName || '-' }}
|
||||
</el-text>
|
||||
</div>
|
||||
@@ -118,12 +165,18 @@
|
||||
</div>
|
||||
|
||||
<!-- 添加入院日期等关键信息 -->
|
||||
<div class="admission-info" v-if="item.admissionDate">
|
||||
<div
|
||||
v-if="item.admissionDate"
|
||||
class="admission-info"
|
||||
>
|
||||
<span class="admission-date">入院日期:{{ item.admissionDate }}</span>
|
||||
</div>
|
||||
|
||||
<!-- 添加主治医生信息 -->
|
||||
<div class="attending-doctor" v-if="item.attendingDoctorName">
|
||||
<div
|
||||
v-if="item.attendingDoctorName"
|
||||
class="attending-doctor"
|
||||
>
|
||||
<span class="doctor-name">主管医生:{{ item.attendingDoctorName }}</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -131,22 +184,28 @@
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</template>
|
||||
<el-empty v-else description="暂无数据" />
|
||||
<el-empty
|
||||
v-else
|
||||
description="暂无数据"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
key="collapsed"
|
||||
class="patientList-list"
|
||||
v-else
|
||||
key="collapsed"
|
||||
v-loading="isLoading"
|
||||
class="patientList-list"
|
||||
:class="{ 'patientList-list-unexpand': !currentExpand }"
|
||||
>
|
||||
<el-scrollbar ref="contractScrollbarRef" class="patient-cards-scrollbar">
|
||||
<el-scrollbar
|
||||
ref="contractScrollbarRef"
|
||||
class="patient-cards-scrollbar"
|
||||
>
|
||||
<template v-if="filteredCardData && filteredCardData.length > 0">
|
||||
<el-tooltip
|
||||
v-for="item in filteredCardData"
|
||||
:show-after="200"
|
||||
:key="item.encounterId"
|
||||
:show-after="200"
|
||||
:show-arrow="true"
|
||||
placement="right"
|
||||
effect="light"
|
||||
@@ -169,18 +228,22 @@
|
||||
|
||||
<div>
|
||||
<div
|
||||
:key="item.encounterId"
|
||||
class="card-small"
|
||||
:class="{ 'patient-active': activeCardId === item.encounterId }"
|
||||
@click="handleSmallCardClick(item)"
|
||||
:key="item.encounterId"
|
||||
>
|
||||
{{ item.bedName }}
|
||||
</div>
|
||||
<div class="patient-card-small-border"></div>
|
||||
<div class="patient-card-small-border" />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-empty v-else description="暂无数据" :image-size="50" />
|
||||
<el-empty
|
||||
v-else
|
||||
description="暂无数据"
|
||||
:image-size="50"
|
||||
/>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</transition>
|
||||
@@ -189,8 +252,15 @@
|
||||
class="patientList-toggle-btn-wrap"
|
||||
:class="{ 'patientList-toggle-btn-wrap-unexpand': !currentExpand }"
|
||||
>
|
||||
<el-button class="icon-btn" circle @click="updateExpand">
|
||||
<el-icon class="svg-sty-menu" size="24">
|
||||
<el-button
|
||||
class="icon-btn"
|
||||
circle
|
||||
@click="updateExpand"
|
||||
>
|
||||
<el-icon
|
||||
class="svg-sty-menu"
|
||||
size="24"
|
||||
>
|
||||
<Expand v-if="!currentExpand" />
|
||||
<Fold v-if="currentExpand" />
|
||||
</el-icon>
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<template>
|
||||
<div class="pending-patient-list">
|
||||
<div class="patient-cards" v-loading="loading">
|
||||
<div
|
||||
v-loading="loading"
|
||||
class="patient-cards"
|
||||
>
|
||||
<template v-if="list && list.length > 0">
|
||||
<el-scrollbar class="patient-cards-scrollbar">
|
||||
<div
|
||||
class="patient-card"
|
||||
v-for="(item, index) in list"
|
||||
:key="item[idKey] ?? index"
|
||||
class="patient-card"
|
||||
:class="{ actived: !!item.active || activeId === item[idKey] }"
|
||||
draggable="true"
|
||||
@click="emit('item-click', item, index)"
|
||||
@@ -18,13 +21,22 @@
|
||||
<div class="header-top">
|
||||
<div class="bed-container">
|
||||
<div class="bed">
|
||||
<el-text truncated tclass="bed-font" width="auto">
|
||||
<el-text
|
||||
truncated
|
||||
tclass="bed-font"
|
||||
width="auto"
|
||||
>
|
||||
{{ item.bedName || '-' }}
|
||||
</el-text>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header-tags">
|
||||
<el-tag v-if="item.contractName" size="small" class="payer-tag" effect="light">
|
||||
<el-tag
|
||||
v-if="item.contractName"
|
||||
size="small"
|
||||
class="payer-tag"
|
||||
effect="light"
|
||||
>
|
||||
{{ item.contractName }}
|
||||
</el-tag>
|
||||
<el-tag
|
||||
@@ -64,7 +76,11 @@
|
||||
<div class="personal-info-container">
|
||||
<div class="name-container">
|
||||
<div class="name">
|
||||
<el-text :text="item.patientName" tclass="name" width="auto">
|
||||
<el-text
|
||||
:text="item.patientName"
|
||||
tclass="name"
|
||||
width="auto"
|
||||
>
|
||||
{{ item.patientName || '-' }}
|
||||
</el-text>
|
||||
</div>
|
||||
@@ -81,19 +97,21 @@
|
||||
{{ item.genderEnum_enumText || '-' }}
|
||||
<span v-if="item.age"> · {{ item.age }}</span>
|
||||
<span v-if="item.priorityEnum_enumText">
|
||||
· {{ item.priorityEnum_enumText }}</span
|
||||
>
|
||||
· {{ item.priorityEnum_enumText }}</span>
|
||||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="meta"></div>
|
||||
<div class="meta" />
|
||||
</div>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</template>
|
||||
<el-empty v-else description="暂无数据" />
|
||||
<el-empty
|
||||
v-else
|
||||
description="暂无数据"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,11 +1,21 @@
|
||||
<template>
|
||||
<el-form ref="formRef" :model="{ tableData }" :rules="rules" class="editable-table-form">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="{ tableData }"
|
||||
:rules="rules"
|
||||
class="editable-table-form"
|
||||
>
|
||||
<div
|
||||
v-if="showAddButton || showDeleteButton || searchFields.length > 0"
|
||||
class="editable-table-toolbar"
|
||||
>
|
||||
<div class="toolbar-left">
|
||||
<el-button v-if="showAddButton" type="primary" icon="Plus" @click="handleToolbarAdd">
|
||||
<el-button
|
||||
v-if="showAddButton"
|
||||
type="primary"
|
||||
icon="Plus"
|
||||
@click="handleToolbarAdd"
|
||||
>
|
||||
添加行
|
||||
</el-button>
|
||||
<el-button
|
||||
@@ -46,11 +56,16 @@
|
||||
:scroll-y="{ enabled: true }"
|
||||
show-overflow="title"
|
||||
v-bind="$attrs"
|
||||
class="editable-table-inner"
|
||||
@checkbox-change="handleSelectionChange"
|
||||
@checkbox-all="handleSelectionChange"
|
||||
class="editable-table-inner"
|
||||
>
|
||||
<vxe-column v-if="showSelection" type="checkbox" width="55" align="center" />
|
||||
<vxe-column
|
||||
v-if="showSelection"
|
||||
type="checkbox"
|
||||
width="55"
|
||||
align="center"
|
||||
/>
|
||||
<vxe-column
|
||||
v-if="showRowActions"
|
||||
:width="rowActionsColumnWidth"
|
||||
@@ -62,11 +77,17 @@
|
||||
v-if="showSelection && selectedRows.length > 0 && !showDeleteButton"
|
||||
style="display: flex; align-items: center; justify-content: center; gap: 4px"
|
||||
>
|
||||
<el-button type="danger" size="small" icon="Delete" link @click="handleDeleteSelected">
|
||||
<el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
icon="Delete"
|
||||
link
|
||||
@click="handleDeleteSelected"
|
||||
>
|
||||
删除选中({{ selectedRows.length }})
|
||||
</el-button>
|
||||
</div>
|
||||
<span v-else></span>
|
||||
<span v-else />
|
||||
</template>
|
||||
<template #default="{ row, rowIndex }">
|
||||
<el-button
|
||||
@@ -75,8 +96,8 @@
|
||||
link
|
||||
icon="CirclePlus"
|
||||
class="action-btn"
|
||||
@click="handleAdd(rowIndex)"
|
||||
title="增加"
|
||||
@click="handleAdd(rowIndex)"
|
||||
/>
|
||||
<el-button
|
||||
v-if="showRowDeleteButton"
|
||||
@@ -84,8 +105,8 @@
|
||||
link
|
||||
icon="Delete"
|
||||
class="action-btn"
|
||||
@click="handleDelete(rowIndex)"
|
||||
title="删除"
|
||||
@click="handleDelete(rowIndex)"
|
||||
/>
|
||||
</template>
|
||||
</vxe-column>
|
||||
@@ -116,7 +137,12 @@
|
||||
@input="col.onInput && col.onInput(row, rowIndex)"
|
||||
@change="col.onChange && col.onChange(row, rowIndex)"
|
||||
>
|
||||
<template v-if="col.suffix" #suffix>{{ col.suffix }}</template>
|
||||
<template
|
||||
v-if="col.suffix"
|
||||
#suffix
|
||||
>
|
||||
{{ col.suffix }}
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
@@ -209,7 +235,11 @@
|
||||
:rules="col.rules"
|
||||
style="margin-bottom: 0"
|
||||
>
|
||||
<slot :name="col.slot || col.prop" :row="row" :index="rowIndex" />
|
||||
<slot
|
||||
:name="col.slot || col.prop"
|
||||
:row="row"
|
||||
:index="rowIndex"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
@@ -223,8 +253,14 @@
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<div v-if="$slots.footer" class="editable-table-footer">
|
||||
<slot name="footer" :tableData="tableData" />
|
||||
<div
|
||||
v-if="$slots.footer"
|
||||
class="editable-table-footer"
|
||||
>
|
||||
<slot
|
||||
name="footer"
|
||||
:table-data="tableData"
|
||||
/>
|
||||
</div>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<template>
|
||||
<div v-if="show" class="query-form-wrapper">
|
||||
<div
|
||||
v-if="show"
|
||||
class="query-form-wrapper"
|
||||
>
|
||||
<el-form
|
||||
ref="queryFormRef"
|
||||
:model="queryParams"
|
||||
@@ -7,7 +10,10 @@
|
||||
class="query-form"
|
||||
:label-width="labelWidth"
|
||||
>
|
||||
<template v-for="item in displayedFormItems" :key="item.prop">
|
||||
<template
|
||||
v-for="item in displayedFormItems"
|
||||
:key="item.prop"
|
||||
>
|
||||
<FormItem
|
||||
:item="item"
|
||||
:model-value="queryParams[item.prop]"
|
||||
@@ -15,19 +21,51 @@
|
||||
@update:model-value="(value) => (queryParams[item.prop] = value)"
|
||||
@change="(value) => item.onChange && item.onChange(value)"
|
||||
>
|
||||
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
|
||||
<slot :name="slotName" v-bind="slotProps" />
|
||||
<template
|
||||
v-for="(_, slotName) in $slots"
|
||||
:key="slotName"
|
||||
#[slotName]="slotProps"
|
||||
>
|
||||
<slot
|
||||
:name="slotName"
|
||||
v-bind="slotProps"
|
||||
/>
|
||||
</template>
|
||||
</FormItem>
|
||||
</template>
|
||||
<el-form-item v-if="showDefaultButtons" style="margin-left: 20px">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button v-if="needCollapse" link @click="toggleExpand" style="margin-left: 16px">
|
||||
<el-form-item
|
||||
v-if="showDefaultButtons"
|
||||
style="margin-left: 20px"
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="resetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="needCollapse"
|
||||
link
|
||||
style="margin-left: 16px"
|
||||
@click="toggleExpand"
|
||||
>
|
||||
{{ isExpanded ? '收起' : '展开' }}
|
||||
<el-icon class="el-icon--right">
|
||||
<DArrowLeft v-if="isExpanded" class="collapse-arrow collapse-arrow--up" />
|
||||
<DArrowRight v-else class="collapse-arrow collapse-arrow--down" />
|
||||
<DArrowLeft
|
||||
v-if="isExpanded"
|
||||
class="collapse-arrow collapse-arrow--up"
|
||||
/>
|
||||
<DArrowRight
|
||||
v-else
|
||||
class="collapse-arrow collapse-arrow--down"
|
||||
/>
|
||||
</el-icon>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
@@ -8,15 +8,25 @@
|
||||
:label-position="labelPosition"
|
||||
class="table-layout-form"
|
||||
>
|
||||
<template v-for="item in normalizedFormItems" :key="item.prop">
|
||||
<template
|
||||
v-for="item in normalizedFormItems"
|
||||
:key="item.prop"
|
||||
>
|
||||
<FormItem
|
||||
:item="item"
|
||||
:model-value="model[item.prop]"
|
||||
@update:model-value="(value) => (model[item.prop] = value)"
|
||||
@change="(value) => item.onChange && item.onChange(value)"
|
||||
>
|
||||
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
|
||||
<slot :name="slotName" v-bind="slotProps" />
|
||||
<template
|
||||
v-for="(_, slotName) in $slots"
|
||||
:key="slotName"
|
||||
#[slotName]="slotProps"
|
||||
>
|
||||
<slot
|
||||
:name="slotName"
|
||||
v-bind="slotProps"
|
||||
/>
|
||||
</template>
|
||||
</FormItem>
|
||||
</template>
|
||||
|
||||
@@ -43,7 +43,11 @@
|
||||
@change="handleChange"
|
||||
@update:model-value="handleUpdate"
|
||||
>
|
||||
<el-radio v-for="option in item.options || []" :key="option.value" :value="option.value">
|
||||
<el-radio
|
||||
v-for="option in item.options || []"
|
||||
:key="option.value"
|
||||
:value="option.value"
|
||||
>
|
||||
{{ option.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
@@ -86,8 +90,8 @@
|
||||
v-else-if="item.type === 'custom'"
|
||||
:name="item.slot || item.prop"
|
||||
:item="item"
|
||||
:modelValue="modelValue"
|
||||
:updateModelValue="handleUpdate"
|
||||
:model-value="modelValue"
|
||||
:update-model-value="handleUpdate"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
@@ -7,8 +7,14 @@
|
||||
:label-position="labelPosition"
|
||||
class="form-layout-form"
|
||||
>
|
||||
<div class="form-items-container" :class="columns > 0 ? `form-layout-${columns}col` : ''">
|
||||
<template v-for="(item, index) in normalizedFormItems" :key="item.prop">
|
||||
<div
|
||||
class="form-items-container"
|
||||
:class="columns > 0 ? `form-layout-${columns}col` : ''"
|
||||
>
|
||||
<template
|
||||
v-for="(item, index) in normalizedFormItems"
|
||||
:key="item.prop"
|
||||
>
|
||||
<FormItem
|
||||
:item="item"
|
||||
:model-value="model[item.prop]"
|
||||
@@ -24,16 +30,23 @@
|
||||
}
|
||||
"
|
||||
>
|
||||
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
|
||||
<slot :name="slotName" v-bind="slotProps" />
|
||||
<template
|
||||
v-for="(_, slotName) in $slots"
|
||||
:key="slotName"
|
||||
#[slotName]="slotProps"
|
||||
>
|
||||
<slot
|
||||
:name="slotName"
|
||||
v-bind="slotProps"
|
||||
/>
|
||||
</template>
|
||||
</FormItem>
|
||||
<span
|
||||
v-if="
|
||||
columns > 0 &&
|
||||
index > 0 &&
|
||||
(index + 1) % columns === 0 &&
|
||||
index < normalizedFormItems.length - 1
|
||||
index > 0 &&
|
||||
(index + 1) % columns === 0 &&
|
||||
index < normalizedFormItems.length - 1
|
||||
"
|
||||
class="form-item-break"
|
||||
/>
|
||||
|
||||
@@ -1,12 +1,34 @@
|
||||
<template>
|
||||
<div class="quick-date-range">
|
||||
<el-select v-model="quickType" class="quick-select" @change="handleQuickChange">
|
||||
<el-option label="自定义时间段" value="custom" />
|
||||
<el-option label="今天" value="today" />
|
||||
<el-option label="昨天" value="yesterday" />
|
||||
<el-option label="本周" value="thisWeek" />
|
||||
<el-option label="上周" value="lastWeek" />
|
||||
<el-option label="最近30日" value="last30Days" />
|
||||
<el-select
|
||||
v-model="quickType"
|
||||
class="quick-select"
|
||||
@change="handleQuickChange"
|
||||
>
|
||||
<el-option
|
||||
label="自定义时间段"
|
||||
value="custom"
|
||||
/>
|
||||
<el-option
|
||||
label="今天"
|
||||
value="today"
|
||||
/>
|
||||
<el-option
|
||||
label="昨天"
|
||||
value="yesterday"
|
||||
/>
|
||||
<el-option
|
||||
label="本周"
|
||||
value="thisWeek"
|
||||
/>
|
||||
<el-option
|
||||
label="上周"
|
||||
value="lastWeek"
|
||||
/>
|
||||
<el-option
|
||||
label="最近30日"
|
||||
value="last30Days"
|
||||
/>
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-model="innerValue"
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<template>
|
||||
<div class="table-container">
|
||||
<div ref="tableWrapperRef" class="table-wrapper">
|
||||
<div
|
||||
ref="tableWrapperRef"
|
||||
class="table-wrapper"
|
||||
>
|
||||
<vxe-table
|
||||
ref="tableRef"
|
||||
v-loading="loading"
|
||||
@@ -15,14 +18,17 @@
|
||||
:auto-resize="true"
|
||||
:scroll-x="{ enabled: true, gt: 20 }"
|
||||
:scroll-y="{ enabled: true, gt: 50 }"
|
||||
style="width: 100%; height: 100%"
|
||||
@cell-click="handleRowClick"
|
||||
@checkbox-change="handleSelectionChange"
|
||||
@checkbox-all="handleSelectionAll"
|
||||
@sort-change="handleSortChange"
|
||||
style="width: 100%; height: 100%"
|
||||
>
|
||||
<!-- 通过配置数组生成的列 -->
|
||||
<template v-for="column in tableColumns" :key="column.prop || column.type">
|
||||
<template
|
||||
v-for="column in tableColumns"
|
||||
:key="column.prop || column.type"
|
||||
>
|
||||
<!-- 选择列 -->
|
||||
<vxe-column
|
||||
v-if="column.type === 'selection'"
|
||||
@@ -51,7 +57,11 @@
|
||||
:fixed="column.fixed"
|
||||
>
|
||||
<template #content="{ row }">
|
||||
<slot :name="column.slot || 'expand'" :row="row" :scope="{ row }" />
|
||||
<slot
|
||||
:name="column.slot || 'expand'"
|
||||
:row="row"
|
||||
:scope="{ row }"
|
||||
/>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<!-- 普通数据列 -->
|
||||
@@ -65,10 +75,20 @@
|
||||
:fixed="column.fixed"
|
||||
:show-overflow="column.showOverflowTooltip !== false"
|
||||
>
|
||||
<template v-if="column.slot" #default="{ row }">
|
||||
<slot :name="column.slot" :row="row" :scope="{ row }" />
|
||||
<template
|
||||
v-if="column.slot"
|
||||
#default="{ row }"
|
||||
>
|
||||
<slot
|
||||
:name="column.slot"
|
||||
:row="row"
|
||||
:scope="{ row }"
|
||||
/>
|
||||
</template>
|
||||
<template v-else-if="column.formatter" #default="{ row }">
|
||||
<template
|
||||
v-else-if="column.formatter"
|
||||
#default="{ row }"
|
||||
>
|
||||
{{ column.formatter(row, { property: column.prop }, column.prop ? row[column.prop] : undefined, 0) }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
@@ -77,12 +97,19 @@
|
||||
<slot name="table" />
|
||||
</vxe-table>
|
||||
</div>
|
||||
<div v-if="showPagination" ref="paginationWrapperRef" class="pagination-wrapper">
|
||||
<div
|
||||
v-if="showPagination"
|
||||
ref="paginationWrapperRef"
|
||||
class="pagination-wrapper"
|
||||
>
|
||||
<div
|
||||
class="pagination-content"
|
||||
:class="{ 'has-left-content': paginationLeftText || $slots.paginationLeft }"
|
||||
>
|
||||
<div v-if="paginationLeftText || $slots.paginationLeft" class="pagination-left">
|
||||
<div
|
||||
v-if="paginationLeftText || $slots.paginationLeft"
|
||||
class="pagination-left"
|
||||
>
|
||||
<slot name="paginationLeft">
|
||||
{{ paginationLeftText }}
|
||||
</slot>
|
||||
|
||||
@@ -6,14 +6,25 @@
|
||||
class="side-query-wrapper"
|
||||
:class="{ collapsed: sideQueryCollapsed }"
|
||||
>
|
||||
<div v-if="!sideQueryCollapsed" class="side-query-header">
|
||||
<el-input v-model="sideSearchKeyword" placeholder="搜索树节点" clearable size="small">
|
||||
<div
|
||||
v-if="!sideQueryCollapsed"
|
||||
class="side-query-header"
|
||||
>
|
||||
<el-input
|
||||
v-model="sideSearchKeyword"
|
||||
placeholder="搜索树节点"
|
||||
clearable
|
||||
size="small"
|
||||
>
|
||||
<template #prefix>
|
||||
<el-icon><Search /></el-icon>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div v-if="!sideQueryCollapsed" class="side-query-content">
|
||||
<div
|
||||
v-if="!sideQueryCollapsed"
|
||||
class="side-query-content"
|
||||
>
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
:data="treeDataWithAll"
|
||||
@@ -24,11 +35,14 @@
|
||||
highlight-current
|
||||
@node-click="handleNodeClick"
|
||||
@current-change="handleCurrentChange"
|
||||
></el-tree>
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="showSideQuery" class="collapse-divider">
|
||||
<div
|
||||
v-if="showSideQuery"
|
||||
class="collapse-divider"
|
||||
>
|
||||
<el-button
|
||||
circle
|
||||
size="small"
|
||||
@@ -59,16 +73,20 @@
|
||||
<template
|
||||
v-for="item in customFormItems"
|
||||
:key="item.prop"
|
||||
v-slot:[item.slotName]="slotProps"
|
||||
#[item.slotName]="slotProps"
|
||||
>
|
||||
<slot :name="item.slotName" :item="slotProps.item" :queryParams="props.queryParams" />
|
||||
<slot
|
||||
:name="item.slotName"
|
||||
:item="slotProps.item"
|
||||
:query-params="props.queryParams"
|
||||
/>
|
||||
</template>
|
||||
<template #default="{ queryParams, handleQuery, resetQuery }">
|
||||
<slot
|
||||
name="topQuery"
|
||||
:queryParams="queryParams"
|
||||
:handleQuery="handleQuery"
|
||||
:resetQuery="resetQuery"
|
||||
:query-params="queryParams"
|
||||
:handle-query="handleQuery"
|
||||
:reset-query="resetQuery"
|
||||
/>
|
||||
</template>
|
||||
</Filter>
|
||||
@@ -99,8 +117,15 @@
|
||||
@sort-change="handleSortChange"
|
||||
@pagination="handlePagination"
|
||||
>
|
||||
<template v-for="(_, slotName) in $slots" :key="slotName" #[slotName]="slotProps">
|
||||
<slot :name="slotName" v-bind="slotProps" />
|
||||
<template
|
||||
v-for="(_, slotName) in $slots"
|
||||
:key="slotName"
|
||||
#[slotName]="slotProps"
|
||||
>
|
||||
<slot
|
||||
:name="slotName"
|
||||
v-bind="slotProps"
|
||||
/>
|
||||
</template>
|
||||
</Table>
|
||||
</div>
|
||||
|
||||
@@ -1,44 +1,91 @@
|
||||
<template>
|
||||
<div class="tree-sidebar" :class="{ collapsed: collapsed, resizing: isResizing, 'no-initial-transition': isLoadingFromStorage}" :style="{ width: sidebarWidth + 'px' }">
|
||||
<div
|
||||
class="tree-sidebar"
|
||||
:class="{ collapsed: collapsed, resizing: isResizing, 'no-initial-transition': isLoadingFromStorage}"
|
||||
:style="{ width: sidebarWidth + 'px' }"
|
||||
>
|
||||
<!-- 右侧拖动条 -->
|
||||
<div v-if="!collapsed" class="resize-handle" @mousedown="startResize" @touchstart="startResize" :class="{ active: isResizing }" />
|
||||
<div
|
||||
v-if="!collapsed"
|
||||
class="resize-handle"
|
||||
:class="{ active: isResizing }"
|
||||
@mousedown="startResize"
|
||||
@touchstart="startResize"
|
||||
/>
|
||||
<div class="tree-header">
|
||||
<span class="tree-title" v-show="!collapsed">
|
||||
<span
|
||||
v-show="!collapsed"
|
||||
class="tree-title"
|
||||
>
|
||||
<el-icon><component :is="titleIcon" /></el-icon> {{ title }}
|
||||
</span>
|
||||
<div class="tree-actions" v-show="!collapsed">
|
||||
<el-tooltip :content="isExpandedAll ? '收起全部' : '展开全部'" placement="right">
|
||||
<el-icon class="tree-action-icon" @click="toggleExpandAll">
|
||||
<div
|
||||
v-show="!collapsed"
|
||||
class="tree-actions"
|
||||
>
|
||||
<el-tooltip
|
||||
:content="isExpandedAll ? '收起全部' : '展开全部'"
|
||||
placement="right"
|
||||
>
|
||||
<el-icon
|
||||
class="tree-action-icon"
|
||||
@click="toggleExpandAll"
|
||||
>
|
||||
<ArrowDown v-if="isExpandedAll" />
|
||||
<ArrowUp v-else />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="刷新" placement="right">
|
||||
<el-icon class="tree-action-icon" @click="handleRefresh"><Refresh /></el-icon>
|
||||
<el-tooltip
|
||||
content="刷新"
|
||||
placement="right"
|
||||
>
|
||||
<el-icon
|
||||
class="tree-action-icon"
|
||||
@click="handleRefresh"
|
||||
>
|
||||
<Refresh />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
<slot name="actions"></slot>
|
||||
<slot name="actions" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 侧边栏展开/收起按钮 -->
|
||||
<div class="collapse-button-container">
|
||||
<el-tooltip :content="collapsed ? '展开' : '收起'" placement="right">
|
||||
<el-icon class="collapse-button" @click="toggleCollapsed">
|
||||
<el-tooltip
|
||||
:content="collapsed ? '展开' : '收起'"
|
||||
placement="right"
|
||||
>
|
||||
<el-icon
|
||||
class="collapse-button"
|
||||
@click="toggleCollapsed"
|
||||
>
|
||||
<DArrowRight v-if="collapsed" />
|
||||
<DArrowLeft v-else />
|
||||
</el-icon>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
<div class="tree-search" v-show="!collapsed" v-if="showSearch">
|
||||
<el-input v-model="searchKeyword" :placeholder="searchPlaceholder" clearable>
|
||||
<div
|
||||
v-show="!collapsed"
|
||||
v-if="showSearch"
|
||||
class="tree-search"
|
||||
>
|
||||
<el-input
|
||||
v-model="searchKeyword"
|
||||
:placeholder="searchPlaceholder"
|
||||
clearable
|
||||
>
|
||||
<template #prefix>
|
||||
<el-icon><Search /></el-icon>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<div class="tree-wrap" v-show="!collapsed">
|
||||
<div
|
||||
v-show="!collapsed"
|
||||
class="tree-wrap"
|
||||
>
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
:data="treeData"
|
||||
@@ -56,13 +103,20 @@
|
||||
@node-collapse="onNodeCollapse"
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<slot name="node" :node="node" :data="data">
|
||||
<slot
|
||||
name="node"
|
||||
:node="node"
|
||||
:data="data"
|
||||
>
|
||||
<span class="tree-node">
|
||||
<el-icon class="node-icon">
|
||||
<Folder v-if="data.children && data.children.length" />
|
||||
<Document v-else />
|
||||
</el-icon>
|
||||
<span class="node-label" :title="node.label">{{ node.label }}</span>
|
||||
<span
|
||||
class="node-label"
|
||||
:title="node.label"
|
||||
>{{ node.label }}</span>
|
||||
</span>
|
||||
</slot>
|
||||
</template>
|
||||
|
||||
@@ -10,34 +10,52 @@
|
||||
{{ formatSexAge(patientInfo?.sexName, patientInfo?.age) }}
|
||||
</span>
|
||||
</label>
|
||||
<div class="tag-list" v-if="patientInfo?.list && patientInfo.list.length > 0">
|
||||
<div
|
||||
v-if="patientInfo?.list && patientInfo.list.length > 0"
|
||||
class="tag-list"
|
||||
>
|
||||
<ball-tag
|
||||
v-for="item in patientInfo.list"
|
||||
:key="item"
|
||||
:tagId="item"
|
||||
:tag-id="item"
|
||||
class="tag-item"
|
||||
></ball-tag>
|
||||
/>
|
||||
</div>
|
||||
<div class="gray-border" v-if="patientInfo?.feeTypeName">
|
||||
<div
|
||||
v-if="patientInfo?.feeTypeName"
|
||||
class="gray-border"
|
||||
>
|
||||
{{ patientInfo.feeTypeName }}
|
||||
</div>
|
||||
<label class="info-label">
|
||||
<span class="label-text-color">住院:</span>
|
||||
<span class="content-text-color">{{ formatDays(patientInfo?.inHospitalDays) }}</span>
|
||||
</label>
|
||||
<label class="info-label" v-if="patientInfo?.inOrgTime">
|
||||
<label
|
||||
v-if="patientInfo?.inOrgTime"
|
||||
class="info-label"
|
||||
>
|
||||
<span class="label-text-color">入科:</span>
|
||||
<span class="content-text-color">{{ patientInfo.inOrgTime }}</span>
|
||||
</label>
|
||||
<label class="info-label" v-if="patientInfo?.inHospitalTime">
|
||||
<label
|
||||
v-if="patientInfo?.inHospitalTime"
|
||||
class="info-label"
|
||||
>
|
||||
<span class="label-text-color">入院时间:</span>
|
||||
<span class="content-text-color">{{ patientInfo.inHospitalTime }}</span>
|
||||
</label>
|
||||
<label class="info-label" v-if="patientInfo?.busNo">
|
||||
<label
|
||||
v-if="patientInfo?.busNo"
|
||||
class="info-label"
|
||||
>
|
||||
<span class="label-text-color">住院号:</span>
|
||||
<span class="content-text-color">{{ patientInfo.busNo }}</span>
|
||||
</label>
|
||||
<label class="info-label diagnosis-label" v-if="patientInfo?.regDiagnosisName">
|
||||
<label
|
||||
v-if="patientInfo?.regDiagnosisName"
|
||||
class="info-label diagnosis-label"
|
||||
>
|
||||
<span class="label-text-color">诊断:</span>
|
||||
<span class="content-text-color">{{ patientInfo.regDiagnosisName }}</span>
|
||||
</label>
|
||||
@@ -52,18 +70,27 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="expand" class="expand_more">
|
||||
<div
|
||||
v-if="expand"
|
||||
class="expand_more"
|
||||
>
|
||||
<div class="expand-content">
|
||||
<div class="expand-section">
|
||||
<label class="expand-label">
|
||||
<span class="primary-text">过敏:</span>
|
||||
<span class="primary-text">{{ patientInfo?.allergies || '无过敏史' }}</span>
|
||||
</label>
|
||||
<label class="expand-label" v-if="patientInfo?.insuplcAdmdvsName">
|
||||
<label
|
||||
v-if="patientInfo?.insuplcAdmdvsName"
|
||||
class="expand-label"
|
||||
>
|
||||
<span class="primary-text">医保统筹区:</span>
|
||||
<span class="primary-text">{{ patientInfo.insuplcAdmdvsName }}</span>
|
||||
</label>
|
||||
<label class="expand-label" v-if="patientInfo?.ciType">
|
||||
<label
|
||||
v-if="patientInfo?.ciType"
|
||||
class="expand-label"
|
||||
>
|
||||
<span class="primary-text">商保信息:</span>
|
||||
<span class="primary-text">{{ patientInfo.ciType }}</span>
|
||||
</label>
|
||||
@@ -73,14 +100,23 @@
|
||||
{{ formatHeightWeight(patientInfo?.height, patientInfo?.weight) }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="blue-bg" v-if="patientInfo?.postoperativeDays">
|
||||
<div
|
||||
v-if="patientInfo?.postoperativeDays"
|
||||
class="blue-bg"
|
||||
>
|
||||
<span class="content-text-color">术后{{ patientInfo.postoperativeDays }}天</span>
|
||||
</div>
|
||||
<div class="blue-bg" v-if="patientInfo?.poorTypeName">
|
||||
<div
|
||||
v-if="patientInfo?.poorTypeName"
|
||||
class="blue-bg"
|
||||
>
|
||||
<span class="label-text-color">贫困类型:</span>
|
||||
<span class="content-text-color">{{ patientInfo.poorTypeName }}</span>
|
||||
</div>
|
||||
<div class="blue-bg" v-if="patientInfo?.pathwayName">
|
||||
<div
|
||||
v-if="patientInfo?.pathwayName"
|
||||
class="blue-bg"
|
||||
>
|
||||
<span class="label-text-color">路径情况:</span>
|
||||
<span class="content-text-color">{{ patientInfo.pathwayName }}</span>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<template>
|
||||
<footer v-if="visible" class="copyright">
|
||||
<footer
|
||||
v-if="visible"
|
||||
class="copyright"
|
||||
>
|
||||
<span>{{ content }}</span>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
@@ -1,24 +1,52 @@
|
||||
<template>
|
||||
<el-drawer v-model="visible" title="公告详情" direction="rtl" size="50%" teleported :before-close="handleClose" class="notice-detail-drawer">
|
||||
<div v-loading="loading" class="notice-detail-drawer__body">
|
||||
<div v-if="!detail" class="notice-empty">
|
||||
<el-drawer
|
||||
v-model="visible"
|
||||
title="公告详情"
|
||||
direction="rtl"
|
||||
size="50%"
|
||||
teleported
|
||||
:before-close="handleClose"
|
||||
class="notice-detail-drawer"
|
||||
>
|
||||
<div
|
||||
v-loading="loading"
|
||||
class="notice-detail-drawer__body"
|
||||
>
|
||||
<div
|
||||
v-if="!detail"
|
||||
class="notice-empty"
|
||||
>
|
||||
<el-icon><Document /></el-icon>
|
||||
<span>暂无数据</span>
|
||||
</div>
|
||||
<div v-else class="notice-page">
|
||||
<div
|
||||
v-else
|
||||
class="notice-page"
|
||||
>
|
||||
<div class="notice-type-wrap">
|
||||
<span v-if="detail.noticeType === '1'" class="notice-type-tag type-notify">
|
||||
<span
|
||||
v-if="detail.noticeType === '1'"
|
||||
class="notice-type-tag type-notify"
|
||||
>
|
||||
<el-icon><Bell /></el-icon> 通知
|
||||
</span>
|
||||
<span v-else-if="detail.noticeType === '2'" class="notice-type-tag type-announce">
|
||||
<span
|
||||
v-else-if="detail.noticeType === '2'"
|
||||
class="notice-type-tag type-announce"
|
||||
>
|
||||
<el-icon><Message /></el-icon> 公告
|
||||
</span>
|
||||
<span v-else class="notice-type-tag type-notify">
|
||||
<span
|
||||
v-else
|
||||
class="notice-type-tag type-notify"
|
||||
>
|
||||
<el-icon><Document /></el-icon> 消息
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<h1 class="notice-title">{{ detail.noticeTitle }}</h1>
|
||||
<h1 class="notice-title">
|
||||
{{ detail.noticeTitle }}
|
||||
</h1>
|
||||
|
||||
<div class="notice-meta">
|
||||
<span class="meta-item">
|
||||
@@ -30,20 +58,27 @@
|
||||
<span>{{ detail.createTime || '—' }}</span>
|
||||
</span>
|
||||
<span class="meta-item">
|
||||
<span :class="['status-dot', isStatusNormal ? 'status-ok' : 'status-off']"></span>
|
||||
<span :class="['status-dot', isStatusNormal ? 'status-ok' : 'status-off']" />
|
||||
<span>{{ isStatusNormal ? '正常' : '已关闭' }}</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="notice-divider">
|
||||
<span class="notice-divider-dot"></span>
|
||||
<span class="notice-divider-dot"></span>
|
||||
<span class="notice-divider-dot"></span>
|
||||
<span class="notice-divider-dot" />
|
||||
<span class="notice-divider-dot" />
|
||||
<span class="notice-divider-dot" />
|
||||
</div>
|
||||
|
||||
<div class="notice-body">
|
||||
<div v-if="hasContent" class="notice-content" v-html="detail.noticeContent" />
|
||||
<div v-else class="notice-empty notice-empty--inner">
|
||||
<div
|
||||
v-if="hasContent"
|
||||
class="notice-content"
|
||||
v-html="detail.noticeContent"
|
||||
/>
|
||||
<div
|
||||
v-else
|
||||
class="notice-empty notice-empty--inner"
|
||||
>
|
||||
<el-icon><Document /></el-icon> 暂无内容
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,34 +1,73 @@
|
||||
<template>
|
||||
<div class="header-notice-trigger">
|
||||
<el-popover
|
||||
v-model:visible="noticeVisible"
|
||||
placement="bottom-end"
|
||||
:width="380"
|
||||
trigger="click"
|
||||
v-model:visible="noticeVisible"
|
||||
popper-class="notice-popover"
|
||||
:show-arrow="false"
|
||||
:offset="8"
|
||||
>
|
||||
<!-- 列表视图 -->
|
||||
<div v-if="!activeNotice" class="notice-popover-content">
|
||||
<div
|
||||
v-if="!activeNotice"
|
||||
class="notice-popover-content"
|
||||
>
|
||||
<div class="notice-header">
|
||||
<span class="notice-header-title">消息中心</span>
|
||||
<span class="notice-header-action" @click="handleReadAll">全部已读</span>
|
||||
<span
|
||||
class="notice-header-action"
|
||||
@click="handleReadAll"
|
||||
>全部已读</span>
|
||||
</div>
|
||||
<el-tabs v-model="activeTab" class="notice-tabs">
|
||||
<el-tabs
|
||||
v-model="activeTab"
|
||||
class="notice-tabs"
|
||||
>
|
||||
<el-tab-pane name="all">
|
||||
<template #label>全部<el-badge v-if="noticeStore.unreadCount > 0" :value="noticeStore.unreadCount" :max="99" class="tab-badge" /></template>
|
||||
<template #label>
|
||||
全部<el-badge
|
||||
v-if="noticeStore.unreadCount > 0"
|
||||
:value="noticeStore.unreadCount"
|
||||
:max="99"
|
||||
class="tab-badge"
|
||||
/>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="notice">
|
||||
<template #label>通知<el-badge v-if="noticeUnread > 0" :value="noticeUnread" :max="99" class="tab-badge" /></template>
|
||||
<template #label>
|
||||
通知<el-badge
|
||||
v-if="noticeUnread > 0"
|
||||
:value="noticeUnread"
|
||||
:max="99"
|
||||
class="tab-badge"
|
||||
/>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane name="announce">
|
||||
<template #label>公告<el-badge v-if="announceUnread > 0" :value="announceUnread" :max="99" class="tab-badge" /></template>
|
||||
<template #label>
|
||||
公告<el-badge
|
||||
v-if="announceUnread > 0"
|
||||
:value="announceUnread"
|
||||
:max="99"
|
||||
class="tab-badge"
|
||||
/>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-scrollbar max-height="380px" class="notice-scroll">
|
||||
<div v-if="filteredList.length === 0" class="notice-empty">
|
||||
<el-empty description="暂无消息" :image-size="60" />
|
||||
<el-scrollbar
|
||||
max-height="380px"
|
||||
class="notice-scroll"
|
||||
>
|
||||
<div
|
||||
v-if="filteredList.length === 0"
|
||||
class="notice-empty"
|
||||
>
|
||||
<el-empty
|
||||
description="暂无消息"
|
||||
:image-size="60"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-for="item in filteredList"
|
||||
@@ -38,54 +77,115 @@
|
||||
@click="openDetail(item)"
|
||||
>
|
||||
<div class="notice-item-icon">
|
||||
<el-icon v-if="item.noticeType === '1'" class="icon-notice"><Bell /></el-icon>
|
||||
<el-icon v-else class="icon-announce"><Notification /></el-icon>
|
||||
<el-icon
|
||||
v-if="item.noticeType === '1'"
|
||||
class="icon-notice"
|
||||
>
|
||||
<Bell />
|
||||
</el-icon>
|
||||
<el-icon
|
||||
v-else
|
||||
class="icon-announce"
|
||||
>
|
||||
<Notification />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div class="notice-item-body">
|
||||
<div class="notice-item-title">
|
||||
<span>{{ item.noticeTitle }}</span>
|
||||
<el-tag v-if="!isRead(item)" type="danger" size="small" effect="dark" class="unread-tag">未读</el-tag>
|
||||
<el-tag
|
||||
v-if="!isRead(item)"
|
||||
type="danger"
|
||||
size="small"
|
||||
effect="dark"
|
||||
class="unread-tag"
|
||||
>
|
||||
未读
|
||||
</el-tag>
|
||||
</div>
|
||||
<div
|
||||
v-if="item.noticeContent"
|
||||
class="notice-item-desc"
|
||||
>
|
||||
{{ stripHtml(item.noticeContent) }}
|
||||
</div>
|
||||
<div class="notice-item-time">
|
||||
{{ formatTime(item.createTime) }}
|
||||
</div>
|
||||
<div class="notice-item-desc" v-if="item.noticeContent">{{ stripHtml(item.noticeContent) }}</div>
|
||||
<div class="notice-item-time">{{ formatTime(item.createTime) }}</div>
|
||||
</div>
|
||||
<el-icon class="notice-item-arrow"><ArrowRight /></el-icon>
|
||||
<el-icon class="notice-item-arrow">
|
||||
<ArrowRight />
|
||||
</el-icon>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
|
||||
<!-- 详情视图 -->
|
||||
<div v-else class="notice-detail-content">
|
||||
<div
|
||||
v-else
|
||||
class="notice-detail-content"
|
||||
>
|
||||
<div class="detail-header">
|
||||
<div class="detail-back" @click="closeDetail">
|
||||
<div
|
||||
class="detail-back"
|
||||
@click="closeDetail"
|
||||
>
|
||||
<el-icon><ArrowLeft /></el-icon>
|
||||
<span>返回</span>
|
||||
</div>
|
||||
<el-tag v-if="!isRead(activeNotice)" type="danger" size="small" effect="dark">未读</el-tag>
|
||||
<el-tag
|
||||
v-if="!isRead(activeNotice)"
|
||||
type="danger"
|
||||
size="small"
|
||||
effect="dark"
|
||||
>
|
||||
未读
|
||||
</el-tag>
|
||||
</div>
|
||||
<div class="detail-type-bar">
|
||||
<span v-if="activeNotice.noticeType === '1'" class="detail-type-tag type-notify">
|
||||
<span
|
||||
v-if="activeNotice.noticeType === '1'"
|
||||
class="detail-type-tag type-notify"
|
||||
>
|
||||
<el-icon><Bell /></el-icon> 通知
|
||||
</span>
|
||||
<span v-else class="detail-type-tag type-announce">
|
||||
<span
|
||||
v-else
|
||||
class="detail-type-tag type-announce"
|
||||
>
|
||||
<el-icon><Notification /></el-icon> 公告
|
||||
</span>
|
||||
<span class="detail-priority" :class="'priority-' + (activeNotice.priority || '2')">
|
||||
<span
|
||||
class="detail-priority"
|
||||
:class="'priority-' + (activeNotice.priority || '2')"
|
||||
>
|
||||
{{ priorityText(activeNotice.priority) }}
|
||||
</span>
|
||||
</div>
|
||||
<h3 class="detail-title">{{ activeNotice.noticeTitle }}</h3>
|
||||
<h3 class="detail-title">
|
||||
{{ activeNotice.noticeTitle }}
|
||||
</h3>
|
||||
<div class="detail-meta">
|
||||
<span><el-icon><User /></el-icon> {{ activeNotice.createBy || '系统' }}</span>
|
||||
<span><el-icon><Clock /></el-icon> {{ activeNotice.createTime }}</span>
|
||||
</div>
|
||||
<el-scrollbar max-height="320px" class="detail-body-scroll">
|
||||
<div class="detail-body" v-html="activeNotice.noticeContent" />
|
||||
<el-scrollbar
|
||||
max-height="320px"
|
||||
class="detail-body-scroll"
|
||||
>
|
||||
<div
|
||||
class="detail-body"
|
||||
v-html="activeNotice.noticeContent"
|
||||
/>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
|
||||
<template #reference>
|
||||
<el-badge :value="noticeStore.unreadCount" :hidden="noticeStore.unreadCount === 0" :max="99">
|
||||
<el-badge
|
||||
:value="noticeStore.unreadCount"
|
||||
:hidden="noticeStore.unreadCount === 0"
|
||||
:max="99"
|
||||
>
|
||||
<el-icon><Bell /></el-icon>
|
||||
</el-badge>
|
||||
</template>
|
||||
|
||||
@@ -152,8 +152,6 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,45 +1,120 @@
|
||||
<template>
|
||||
<el-drawer v-model="showSettings" :withHeader="false" :lock-scroll="false" direction="rtl" size="300px">
|
||||
<el-drawer
|
||||
v-model="showSettings"
|
||||
:with-header="false"
|
||||
:lock-scroll="false"
|
||||
direction="rtl"
|
||||
size="300px"
|
||||
>
|
||||
<div class="setting-drawer-title">
|
||||
<h3 class="drawer-title">菜单导航设置</h3>
|
||||
<h3 class="drawer-title">
|
||||
菜单导航设置
|
||||
</h3>
|
||||
</div>
|
||||
<div class="nav-wrap">
|
||||
<el-tooltip content="左侧菜单" placement="bottom">
|
||||
<div class="item left" @click="handleNavType(1)" :class="{ activeItem: navType == 1 }">
|
||||
<b></b><b></b>
|
||||
<el-tooltip
|
||||
content="左侧菜单"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
class="item left"
|
||||
:class="{ activeItem: navType == 1 }"
|
||||
@click="handleNavType(1)"
|
||||
>
|
||||
<b /><b />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip content="混合菜单" placement="bottom">
|
||||
<div class="item mix" @click="handleNavType(2)" :class="{ activeItem: navType == 2 }">
|
||||
<b></b><b></b>
|
||||
<el-tooltip
|
||||
content="混合菜单"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
class="item mix"
|
||||
:class="{ activeItem: navType == 2 }"
|
||||
@click="handleNavType(2)"
|
||||
>
|
||||
<b /><b />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="顶部菜单" placement="bottom">
|
||||
<div class="item top" @click="handleNavType(3)" :class="{ activeItem: navType == 3 }">
|
||||
<b></b><b></b>
|
||||
<el-tooltip
|
||||
content="顶部菜单"
|
||||
placement="bottom"
|
||||
>
|
||||
<div
|
||||
class="item top"
|
||||
:class="{ activeItem: navType == 3 }"
|
||||
@click="handleNavType(3)"
|
||||
>
|
||||
<b /><b />
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
<div class="setting-drawer-title">
|
||||
<h3 class="drawer-title">主题风格设置</h3>
|
||||
<h3 class="drawer-title">
|
||||
主题风格设置
|
||||
</h3>
|
||||
</div>
|
||||
<div class="setting-drawer-block-checbox">
|
||||
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')">
|
||||
<img src="@/assets/images/dark.svg" alt="dark" />
|
||||
<div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
||||
<i aria-label="图标: check" class="anticon anticon-check">
|
||||
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
||||
<div
|
||||
class="setting-drawer-block-checbox-item"
|
||||
@click="handleTheme('theme-dark')"
|
||||
>
|
||||
<img
|
||||
src="@/assets/images/dark.svg"
|
||||
alt="dark"
|
||||
>
|
||||
<div
|
||||
v-if="sideTheme === 'theme-dark'"
|
||||
class="setting-drawer-block-checbox-selectIcon"
|
||||
style="display: block;"
|
||||
>
|
||||
<i
|
||||
aria-label="图标: check"
|
||||
class="anticon anticon-check"
|
||||
>
|
||||
<svg
|
||||
viewBox="64 64 896 896"
|
||||
data-icon="check"
|
||||
width="1em"
|
||||
height="1em"
|
||||
:fill="theme"
|
||||
aria-hidden="true"
|
||||
focusable="false"
|
||||
class
|
||||
>
|
||||
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
||||
</svg>
|
||||
</i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')">
|
||||
<img src="@/assets/images/light.svg" alt="light" />
|
||||
<div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;">
|
||||
<i aria-label="图标: check" class="anticon anticon-check">
|
||||
<svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class>
|
||||
<div
|
||||
class="setting-drawer-block-checbox-item"
|
||||
@click="handleTheme('theme-light')"
|
||||
>
|
||||
<img
|
||||
src="@/assets/images/light.svg"
|
||||
alt="light"
|
||||
>
|
||||
<div
|
||||
v-if="sideTheme === 'theme-light'"
|
||||
class="setting-drawer-block-checbox-selectIcon"
|
||||
style="display: block;"
|
||||
>
|
||||
<i
|
||||
aria-label="图标: check"
|
||||
class="anticon anticon-check"
|
||||
>
|
||||
<svg
|
||||
viewBox="64 64 896 896"
|
||||
data-icon="check"
|
||||
width="1em"
|
||||
height="1em"
|
||||
:fill="theme"
|
||||
aria-hidden="true"
|
||||
focusable="false"
|
||||
class
|
||||
>
|
||||
<path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z" />
|
||||
</svg>
|
||||
</i>
|
||||
@@ -49,38 +124,60 @@
|
||||
<div class="drawer-item">
|
||||
<span>主题颜色</span>
|
||||
<span class="comp-style">
|
||||
<el-color-picker v-model="theme" :predefine="predefineColors" @change="themeChange"/>
|
||||
<el-color-picker
|
||||
v-model="theme"
|
||||
:predefine="predefineColors"
|
||||
@change="themeChange"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
<el-divider />
|
||||
|
||||
<h3 class="drawer-title">系统布局配置</h3>
|
||||
<h3 class="drawer-title">
|
||||
系统布局配置
|
||||
</h3>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>开启页签</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.tagsView" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.tagsView"
|
||||
class="drawer-switch"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>持久化标签页</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.tagsViewPersist" :disabled="!settingsStore.tagsView" @change="tagsViewPersistChange" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.tagsViewPersist"
|
||||
:disabled="!settingsStore.tagsView"
|
||||
class="drawer-switch"
|
||||
@change="tagsViewPersistChange"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>显示页签图标</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.tagsIcon" :disabled="!settingsStore.tagsView" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.tagsIcon"
|
||||
:disabled="!settingsStore.tagsView"
|
||||
class="drawer-switch"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>标签页样式</span>
|
||||
<span class="comp-style">
|
||||
<el-radio-group v-model="settingsStore.tagsViewStyle" :disabled="!settingsStore.tagsView" size="small">
|
||||
<el-radio-group
|
||||
v-model="settingsStore.tagsViewStyle"
|
||||
:disabled="!settingsStore.tagsView"
|
||||
size="small"
|
||||
>
|
||||
<el-radio-button>卡片</el-radio-button>
|
||||
<el-radio-button value="chrome">谷歌</el-radio-button>
|
||||
</el-radio-group>
|
||||
@@ -90,37 +187,62 @@
|
||||
<div class="drawer-item">
|
||||
<span>固定 Header</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.fixedHeader" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.fixedHeader"
|
||||
class="drawer-switch"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>显示 Logo</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.sidebarLogo" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.sidebarLogo"
|
||||
class="drawer-switch"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>动态标题</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.dynamicTitle" @change="dynamicTitleChange" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.dynamicTitle"
|
||||
class="drawer-switch"
|
||||
@change="dynamicTitleChange"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="drawer-item">
|
||||
<span>底部版权</span>
|
||||
<span class="comp-style">
|
||||
<el-switch v-model="settingsStore.footerVisible" class="drawer-switch" />
|
||||
<el-switch
|
||||
v-model="settingsStore.footerVisible"
|
||||
class="drawer-switch"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<el-divider />
|
||||
|
||||
<el-button type="primary" plain icon="DocumentAdd" @click="saveSetting">保存配置</el-button>
|
||||
<el-button plain icon="Refresh" @click="resetSetting">重置配置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="DocumentAdd"
|
||||
@click="saveSetting"
|
||||
>
|
||||
保存配置
|
||||
</el-button>
|
||||
<el-button
|
||||
plain
|
||||
icon="Refresh"
|
||||
@click="resetSetting"
|
||||
>
|
||||
重置配置
|
||||
</el-button>
|
||||
</el-drawer>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
||||
@@ -119,15 +119,26 @@ defineExpose({ patientInfo, firstRecordTime, firstRecordIntro, caseFeatures, chi
|
||||
<div class="medical-record-container">
|
||||
<!-- 打印按钮:固定在顶部,非打印内容 -->
|
||||
<div class="print-btn-container no-print">
|
||||
<el-button type="primary" @click="handlePrint">打印病历</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handlePrint"
|
||||
>
|
||||
打印病历
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 病历主体:打印核心内容 -->
|
||||
<div class="medical-record">
|
||||
<!-- 1. 医院头部(每一页PDF均包含,复用已有样式) -->
|
||||
<div class="hospital-header">
|
||||
<img src="./imgs/logo.png" :alt="userStore.hospitalName + 'Logo'" class="header-logo" />
|
||||
<h1 class="hospital-name">{{ userStore.hospitalName }}</h1>
|
||||
<img
|
||||
src="./imgs/logo.png"
|
||||
:alt="userStore.hospitalName + 'Logo'"
|
||||
class="header-logo"
|
||||
>
|
||||
<h1 class="hospital-name">
|
||||
{{ userStore.hospitalName }}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<!-- 2. 患者信息栏(每一页PDF均包含,下划线样式) -->
|
||||
@@ -140,38 +151,85 @@ defineExpose({ patientInfo, firstRecordTime, firstRecordIntro, caseFeatures, chi
|
||||
|
||||
<!-- 3. 首次病程记录 -->
|
||||
<div class="record-section">
|
||||
<h2 class="section-main-title">首 次 病 程 记 录</h2>
|
||||
<div class="record-time">{{ firstRecordTime }}</div>
|
||||
<el-input v-model="firstRecordIntro" autosize type="textarea" class="clean-textarea" />
|
||||
<h2 class="section-main-title">
|
||||
首 次 病 程 记 录
|
||||
</h2>
|
||||
<div class="record-time">
|
||||
{{ firstRecordTime }}
|
||||
</div>
|
||||
<el-input
|
||||
v-model="firstRecordIntro"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
|
||||
<!-- 病例特点 -->
|
||||
<h3 class="section-sub-title">一、病例特点</h3>
|
||||
<el-input v-model="caseFeatures" autosize type="textarea" class="clean-textarea" />
|
||||
<h3 class="section-sub-title">
|
||||
一、病例特点
|
||||
</h3>
|
||||
<el-input
|
||||
v-model="caseFeatures"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
|
||||
<!-- 拟诊讨论 -->
|
||||
<h3 class="section-sub-title">二、拟诊讨论</h3>
|
||||
<el-input v-model="chinaDiscussion" autosize type="textarea" class="clean-textarea" />
|
||||
<el-input v-model="westDiscussion" autosize type="textarea" class="clean-textarea" />
|
||||
<h3 class="section-sub-title">
|
||||
二、拟诊讨论
|
||||
</h3>
|
||||
<el-input
|
||||
v-model="chinaDiscussion"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
<el-input
|
||||
v-model="westDiscussion"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
|
||||
<!-- 初步诊断 -->
|
||||
<el-input v-model="preliminaryDiagnosis" autosize type="textarea" class="clean-textarea" />
|
||||
<el-input
|
||||
v-model="preliminaryDiagnosis"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
|
||||
<!-- 诊疗计划 -->
|
||||
<el-input v-model="treatmentPlan" autosize type="textarea" class="clean-textarea" />
|
||||
<el-input
|
||||
v-model="treatmentPlan"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
|
||||
<!-- 首次病程记录签名 -->
|
||||
<div class="signature-group">
|
||||
<span class="signature-label">医师签名:</span>
|
||||
<el-input v-model="signatures.firstDoctor" autosize type="textarea" class="clean-textarea signature-input"
|
||||
:rows="1" />
|
||||
<el-input
|
||||
v-model="signatures.firstDoctor"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea signature-input"
|
||||
:rows="1"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 4. 分页分隔线(模拟PDF分页,打印时自动分页) -->
|
||||
<div class="page-break"></div>
|
||||
<div class="page-break" />
|
||||
|
||||
<!-- 5. 后续查房/会诊记录(按时间顺序) -->
|
||||
<div v-for="(record, index) in roundRecords" :key="index" class="record-section">
|
||||
<div
|
||||
v-for="(record, index) in roundRecords"
|
||||
:key="index"
|
||||
class="record-section"
|
||||
>
|
||||
<!-- 重复患者信息(与PDF一致) -->
|
||||
<div class="patient-info page-repeated-info">
|
||||
<span class="info-item">姓名:{{ patientInfo.name }}</span>
|
||||
@@ -181,27 +239,53 @@ defineExpose({ patientInfo, firstRecordTime, firstRecordIntro, caseFeatures, chi
|
||||
</div>
|
||||
|
||||
<!-- 查房标题+时间 -->
|
||||
<h2 class="section-main-title">{{ record.title }}</h2>
|
||||
<div class="record-time">{{ record.time }}</div>
|
||||
<h2 class="section-main-title">
|
||||
{{ record.title }}
|
||||
</h2>
|
||||
<div class="record-time">
|
||||
{{ record.time }}
|
||||
</div>
|
||||
|
||||
<!-- 查房内容 -->
|
||||
<el-input v-model="record.content" autosize type="textarea" class="clean-textarea" />
|
||||
<el-input
|
||||
v-model="record.content"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea"
|
||||
/>
|
||||
|
||||
<!-- 查房签名(区分普通医师/上级医师) -->
|
||||
<div class="signature-group">
|
||||
<span class="signature-label">医师签名:</span>
|
||||
<el-input v-model="signatures[`round${index}Doctor`]" autosize type="textarea"
|
||||
class="clean-textarea signature-input" :rows="1" />
|
||||
<el-input
|
||||
v-model="signatures[`round${index}Doctor`]"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea signature-input"
|
||||
:rows="1"
|
||||
/>
|
||||
|
||||
<span v-if="record.signature.physician" class="signature-label ml-20">
|
||||
<span
|
||||
v-if="record.signature.physician"
|
||||
class="signature-label ml-20"
|
||||
>
|
||||
{{ record.signature.physician }}
|
||||
</span>
|
||||
<el-input v-if="record.signature.physician" v-model="signatures[`round${index}Physician`]" autosize
|
||||
type="textarea" class="clean-textarea signature-input" :rows="1" />
|
||||
<el-input
|
||||
v-if="record.signature.physician"
|
||||
v-model="signatures[`round${index}Physician`]"
|
||||
autosize
|
||||
type="textarea"
|
||||
class="clean-textarea signature-input"
|
||||
:rows="1"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 分页分隔线(最后一条记录无需分页) -->
|
||||
<div v-if="index !== roundRecords.length - 1" class="page-break"></div>
|
||||
<div
|
||||
v-if="index !== roundRecords.length - 1"
|
||||
class="page-break"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -130,7 +130,8 @@
|
||||
<el-radio-group v-model="state.formData.surgeryMark">
|
||||
<el-radio
|
||||
v-for="item in getStatisticsOptionList('surgeryMark')"
|
||||
:key="item.dictValue" :value="item.dictValue"
|
||||
:key="item.dictValue"
|
||||
:value="item.dictValue"
|
||||
>
|
||||
{{ item.dictLabel }}
|
||||
</el-radio>
|
||||
|
||||
@@ -6,23 +6,44 @@
|
||||
:rules="rules"
|
||||
label-width="auto"
|
||||
>
|
||||
<el-form-item label="Activity name" prop="name">
|
||||
<el-form-item
|
||||
label="Activity name"
|
||||
prop="name"
|
||||
>
|
||||
<el-input v-model="ruleForm.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Activity zone" prop="region">
|
||||
<el-select v-model="ruleForm.region" placeholder="Activity zone">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-form-item
|
||||
label="Activity zone"
|
||||
prop="region"
|
||||
>
|
||||
<el-select
|
||||
v-model="ruleForm.region"
|
||||
placeholder="Activity zone"
|
||||
>
|
||||
<el-option
|
||||
label="Zone one"
|
||||
value="shanghai"
|
||||
/>
|
||||
<el-option
|
||||
label="Zone two"
|
||||
value="beijing"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="Activity count" prop="count">
|
||||
<el-form-item
|
||||
label="Activity count"
|
||||
prop="count"
|
||||
>
|
||||
<el-select-v2
|
||||
v-model="ruleForm.count"
|
||||
placeholder="Activity count"
|
||||
:options="options"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="Activity time" required>
|
||||
<el-form-item
|
||||
label="Activity time"
|
||||
required
|
||||
>
|
||||
<el-col :span="11">
|
||||
<el-form-item prop="date1">
|
||||
<el-date-picker
|
||||
@@ -34,7 +55,10 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col class="text-center" :span="2">
|
||||
<el-col
|
||||
class="text-center"
|
||||
:span="2"
|
||||
>
|
||||
<span class="text-gray-500">-</span>
|
||||
</el-col>
|
||||
<el-col :span="11">
|
||||
@@ -48,42 +72,82 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<el-form-item label="Instant delivery" prop="delivery">
|
||||
<el-form-item
|
||||
label="Instant delivery"
|
||||
prop="delivery"
|
||||
>
|
||||
<el-switch v-model="ruleForm.delivery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Activity location" prop="location">
|
||||
<el-segmented v-model="ruleForm.location" :options="locationOptions" />
|
||||
<el-form-item
|
||||
label="Activity location"
|
||||
prop="location"
|
||||
>
|
||||
<el-segmented
|
||||
v-model="ruleForm.location"
|
||||
:options="locationOptions"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="Activity type" prop="type">
|
||||
<el-form-item
|
||||
label="Activity type"
|
||||
prop="type"
|
||||
>
|
||||
<el-checkbox-group v-model="ruleForm.type">
|
||||
<el-checkbox value="Online activities" name="type">
|
||||
<el-checkbox
|
||||
value="Online activities"
|
||||
name="type"
|
||||
>
|
||||
Online activities
|
||||
</el-checkbox>
|
||||
<el-checkbox value="Promotion activities" name="type">
|
||||
<el-checkbox
|
||||
value="Promotion activities"
|
||||
name="type"
|
||||
>
|
||||
Promotion activities
|
||||
</el-checkbox>
|
||||
<el-checkbox value="Offline activities" name="type">
|
||||
<el-checkbox
|
||||
value="Offline activities"
|
||||
name="type"
|
||||
>
|
||||
Offline activities
|
||||
</el-checkbox>
|
||||
<el-checkbox value="Simple brand exposure" name="type">
|
||||
<el-checkbox
|
||||
value="Simple brand exposure"
|
||||
name="type"
|
||||
>
|
||||
Simple brand exposure
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="Resources" prop="resource">
|
||||
<el-form-item
|
||||
label="Resources"
|
||||
prop="resource"
|
||||
>
|
||||
<el-radio-group v-model="ruleForm.resource">
|
||||
<el-radio>Sponsorship</el-radio>
|
||||
<el-radio value="Venue">Venue</el-radio>
|
||||
<el-radio value="Venue">
|
||||
Venue
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="Activity form" prop="desc">
|
||||
<el-input v-model="ruleForm.desc" type="textarea" />
|
||||
<el-form-item
|
||||
label="Activity form"
|
||||
prop="desc"
|
||||
>
|
||||
<el-input
|
||||
v-model="ruleForm.desc"
|
||||
type="textarea"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitForm(ruleFormRef)">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm(ruleFormRef)"
|
||||
>
|
||||
Create
|
||||
</el-button>
|
||||
<el-button @click="resetForm(ruleFormRef)">Reset</el-button>
|
||||
<el-button @click="resetForm(ruleFormRef)">
|
||||
Reset
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
@@ -1,83 +1,290 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
|
||||
<el-form-item label="就诊号" prop="encounterId">
|
||||
<el-input v-model="queryParams.encounterId" placeholder="就诊号" clearable />
|
||||
<el-form
|
||||
v-show="showSearch"
|
||||
ref="queryForm"
|
||||
:model="queryParams"
|
||||
:inline="true"
|
||||
>
|
||||
<el-form-item
|
||||
label="就诊号"
|
||||
prop="encounterId"
|
||||
>
|
||||
<el-input
|
||||
v-model="queryParams.encounterId"
|
||||
placeholder="就诊号"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="queryParams.status" placeholder="全部" clearable>
|
||||
<el-option label="草稿" value="DRAFT" /><el-option label="进行中" value="IN_PROGRESS" /><el-option label="已完成" value="COMPLETED" />
|
||||
<el-select
|
||||
v-model="queryParams.status"
|
||||
placeholder="全部"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
label="草稿"
|
||||
value="DRAFT"
|
||||
/><el-option
|
||||
label="进行中"
|
||||
value="IN_PROGRESS"
|
||||
/><el-option
|
||||
label="已完成"
|
||||
value="COMPLETED"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item><el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button></el-form-item>
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="loading" :data="dataList">
|
||||
<el-table-column label="患者" prop="patientName" width="120" />
|
||||
<el-table-column label="麻醉类型" prop="anesthesiaType" width="120" />
|
||||
<el-table-column label="ASA分级" prop="asaGrade" width="80" />
|
||||
<el-table-column label="麻醉医生" prop="anesthetistName" width="120" />
|
||||
<el-table-column label="开始时间" prop="startTime" width="170" />
|
||||
<el-table-column label="结束时间" prop="endTime" width="170" />
|
||||
<el-table-column label="状态" prop="status" width="100">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
>
|
||||
<el-table-column
|
||||
label="患者"
|
||||
prop="patientName"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="麻醉类型"
|
||||
prop="anesthesiaType"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="ASA分级"
|
||||
prop="asaGrade"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
label="麻醉医生"
|
||||
prop="anesthetistName"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="开始时间"
|
||||
prop="startTime"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
label="结束时间"
|
||||
prop="endTime"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
prop="status"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.status === 'COMPLETED' ? 'success' : scope.row.status === 'DRAFT' ? 'info' : ''">{{ { DRAFT: '草稿', IN_PROGRESS: '进行中', COMPLETED: '已完成' }[scope.row.status] }}</el-tag>
|
||||
<el-tag :type="scope.row.status === 'COMPLETED' ? 'success' : scope.row.status === 'DRAFT' ? 'info' : ''">
|
||||
{{ { DRAFT: '草稿', IN_PROGRESS: '进行中', COMPLETED: '已完成' }[scope.row.status] }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" align="center">
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="150"
|
||||
align="center"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleDetail(scope.row)">详情</el-button>
|
||||
<el-button link type="primary" v-if="scope.row.status !== 'COMPLETED'" @click="handleComplete(scope.row)">完成</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleDetail(scope.row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.status !== 'COMPLETED'"
|
||||
link
|
||||
type="primary"
|
||||
@click="handleComplete(scope.row)"
|
||||
>
|
||||
完成
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-dialog title="麻醉记录详情" v-model="detailVisible" width="800px" top="5vh">
|
||||
<el-dialog
|
||||
v-model="detailVisible"
|
||||
title="麻醉记录详情"
|
||||
width="800px"
|
||||
top="5vh"
|
||||
>
|
||||
<el-tabs v-model="activeTab">
|
||||
<el-tab-pane label="基本信息" name="basic">
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="ASA分级">{{ recordDetail.asaGrade }}</el-descriptions-item>
|
||||
<el-descriptions-item label="麻醉类型">{{ recordDetail.anesthesiaType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="麻醉方式">{{ recordDetail.anesthesiaMethod }}</el-descriptions-item>
|
||||
<el-descriptions-item label="气道评估">{{ recordDetail.airwayAssessment }}</el-descriptions-item>
|
||||
<el-descriptions-item label="禁食确认">{{ recordDetail.fastingConfirmed ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="知情同意">{{ recordDetail.consentSigned ? '已签署' : '未签署' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="摘要" :span="2">{{ recordDetail.summary }}</el-descriptions-item>
|
||||
<el-tab-pane
|
||||
label="基本信息"
|
||||
name="basic"
|
||||
>
|
||||
<el-descriptions
|
||||
:column="2"
|
||||
border
|
||||
>
|
||||
<el-descriptions-item label="ASA分级">
|
||||
{{ recordDetail.asaGrade }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="麻醉类型">
|
||||
{{ recordDetail.anesthesiaType }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="麻醉方式">
|
||||
{{ recordDetail.anesthesiaMethod }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="气道评估">
|
||||
{{ recordDetail.airwayAssessment }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="禁食确认">
|
||||
{{ recordDetail.fastingConfirmed ? '是' : '否' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="知情同意">
|
||||
{{ recordDetail.consentSigned ? '已签署' : '未签署' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="摘要"
|
||||
:span="2"
|
||||
>
|
||||
{{ recordDetail.summary }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="生命体征" name="vital">
|
||||
<el-table :data="vitalSigns" size="small">
|
||||
<el-table-column label="时间" prop="recordTime" width="170" />
|
||||
<el-table-column label="心率" prop="heartRate" width="80" />
|
||||
<el-table-column label="收缩压" prop="bloodPressureSys" width="80" />
|
||||
<el-table-column label="舒张压" prop="bloodPressureDia" width="80" />
|
||||
<el-table-column label="血氧" prop="spo2" width="80" />
|
||||
<el-table-column label="体温" prop="temperature" width="80" />
|
||||
<el-table-column label="呼吸" prop="respiratoryRate" width="80" />
|
||||
<el-tab-pane
|
||||
label="生命体征"
|
||||
name="vital"
|
||||
>
|
||||
<el-table
|
||||
:data="vitalSigns"
|
||||
size="small"
|
||||
>
|
||||
<el-table-column
|
||||
label="时间"
|
||||
prop="recordTime"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
label="心率"
|
||||
prop="heartRate"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
label="收缩压"
|
||||
prop="bloodPressureSys"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
label="舒张压"
|
||||
prop="bloodPressureDia"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
label="血氧"
|
||||
prop="spo2"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
label="体温"
|
||||
prop="temperature"
|
||||
width="80"
|
||||
/>
|
||||
<el-table-column
|
||||
label="呼吸"
|
||||
prop="respiratoryRate"
|
||||
width="80"
|
||||
/>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="用药记录" name="medication">
|
||||
<el-table :data="medications" size="small">
|
||||
<el-table-column label="药品" prop="drugName" width="150" />
|
||||
<el-table-column label="剂量" prop="dosage" width="100" />
|
||||
<el-table-column label="途径" prop="route" width="100" />
|
||||
<el-table-column label="开始" prop="startTime" width="170" />
|
||||
<el-table-column label="结束" prop="endTime" width="170" />
|
||||
<el-tab-pane
|
||||
label="用药记录"
|
||||
name="medication"
|
||||
>
|
||||
<el-table
|
||||
:data="medications"
|
||||
size="small"
|
||||
>
|
||||
<el-table-column
|
||||
label="药品"
|
||||
prop="drugName"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
label="剂量"
|
||||
prop="dosage"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="途径"
|
||||
prop="route"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="开始"
|
||||
prop="startTime"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
label="结束"
|
||||
prop="endTime"
|
||||
width="170"
|
||||
/>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="出入量" name="io">
|
||||
<el-descriptions :column="2" border v-if="ioSummary">
|
||||
<el-descriptions-item label="总入量">{{ ioSummary.totalInput }} ml</el-descriptions-item>
|
||||
<el-descriptions-item label="总出量">{{ ioSummary.totalOutput }} ml</el-descriptions-item>
|
||||
<el-descriptions-item label="出入平衡">{{ ioSummary.balance }} ml</el-descriptions-item>
|
||||
<el-tab-pane
|
||||
label="出入量"
|
||||
name="io"
|
||||
>
|
||||
<el-descriptions
|
||||
v-if="ioSummary"
|
||||
:column="2"
|
||||
border
|
||||
>
|
||||
<el-descriptions-item label="总入量">
|
||||
{{ ioSummary.totalInput }} ml
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="总出量">
|
||||
{{ ioSummary.totalOutput }} ml
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出入平衡">
|
||||
{{ ioSummary.balance }} ml
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="术后随访" name="followup">
|
||||
<el-table :data="followups" size="small">
|
||||
<el-table-column label="随访日期" prop="followupDate" width="120" />
|
||||
<el-table-column label="疼痛评分" prop="painScore" width="100" />
|
||||
<el-table-column label="恶心呕吐" width="100">
|
||||
<template #default="scope">{{ scope.row.nauseaVomiting ? '有' : '无' }}</template>
|
||||
<el-tab-pane
|
||||
label="术后随访"
|
||||
name="followup"
|
||||
>
|
||||
<el-table
|
||||
:data="followups"
|
||||
size="small"
|
||||
>
|
||||
<el-table-column
|
||||
label="随访日期"
|
||||
prop="followupDate"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="疼痛评分"
|
||||
prop="painScore"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="恶心呕吐"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.nauseaVomiting ? '有' : '无' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="notes" show-overflow-tooltip />
|
||||
<el-table-column
|
||||
label="备注"
|
||||
prop="notes"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
@@ -1,64 +1,245 @@
|
||||
<template>
|
||||
<div style="padding:16px">
|
||||
<div style="margin-bottom:16px"><span style="font-size:18px;font-weight:bold">麻醉系统增强</span></div>
|
||||
<el-tabs v-model="tab" type="border-card">
|
||||
<el-tab-pane label="标本管理" name="specimen">
|
||||
<div style="margin-bottom:12px"><el-button type="success" @click="showSpec=true">新增标本</el-button></div>
|
||||
<el-table :data="specData" border stripe>
|
||||
<el-table-column prop="patientName" label="患者" width="90"/>
|
||||
<el-table-column prop="specimenType" label="标本类型" width="100"/>
|
||||
<el-table-column prop="specimenName" label="标本名称" width="150"/>
|
||||
<el-table-column prop="collectorName" label="采集人" width="90"/>
|
||||
<el-table-column prop="pathologyStatus" label="病理状态" width="100">
|
||||
<template #default="{row}"><el-tag :type="row.pathologyStatus==='REPORTED'?'success':'warning'" size="small">{{ row.pathologyStatus==='PENDING'?'送检中':'已出报告' }}</el-tag></template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="120">
|
||||
<div style="margin-bottom:16px">
|
||||
<span style="font-size:18px;font-weight:bold">麻醉系统增强</span>
|
||||
</div>
|
||||
<el-tabs
|
||||
v-model="tab"
|
||||
type="border-card"
|
||||
>
|
||||
<el-tab-pane
|
||||
label="标本管理"
|
||||
name="specimen"
|
||||
>
|
||||
<div style="margin-bottom:12px">
|
||||
<el-button
|
||||
type="success"
|
||||
@click="showSpec=true"
|
||||
>
|
||||
新增标本
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="specData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
prop="patientName"
|
||||
label="患者"
|
||||
width="90"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="specimenType"
|
||||
label="标本类型"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="specimenName"
|
||||
label="标本名称"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="collectorName"
|
||||
label="采集人"
|
||||
width="90"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="pathologyStatus"
|
||||
label="病理状态"
|
||||
width="100"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-button v-if="row.pathologyStatus==='PENDING'" type="primary" link size="small" @click="reportAction(row)">出报告</el-button>
|
||||
<el-tag
|
||||
:type="row.pathologyStatus==='REPORTED'?'success':'warning'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.pathologyStatus==='PENDING'?'送检中':'已出报告' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-button
|
||||
v-if="row.pathologyStatus==='PENDING'"
|
||||
type="primary"
|
||||
link
|
||||
size="small"
|
||||
@click="reportAction(row)"
|
||||
>
|
||||
出报告
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="术后随访" name="followup">
|
||||
<div style="margin-bottom:12px"><el-button type="success" @click="showFu=true">新增随访</el-button></div>
|
||||
<el-table :data="fuData" border stripe>
|
||||
<el-table-column prop="patientName" label="患者" width="90"/>
|
||||
<el-table-column prop="followupType" label="随访类型" width="90"/>
|
||||
<el-table-column prop="painScore" label="疼痛评分" width="90" align="center"/>
|
||||
<el-table-column prop="nauseaVomiting" label="恶心呕吐" width="90">
|
||||
<template #default="{row}"><el-tag :type="row.nauseaVomiting?'danger':'success'" size="small">{{ row.nauseaVomiting?'是':'否' }}</el-tag></template>
|
||||
<el-tab-pane
|
||||
label="术后随访"
|
||||
name="followup"
|
||||
>
|
||||
<div style="margin-bottom:12px">
|
||||
<el-button
|
||||
type="success"
|
||||
@click="showFu=true"
|
||||
>
|
||||
新增随访
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="fuData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
prop="patientName"
|
||||
label="患者"
|
||||
width="90"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="followupType"
|
||||
label="随访类型"
|
||||
width="90"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="painScore"
|
||||
label="疼痛评分"
|
||||
width="90"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="nauseaVomiting"
|
||||
label="恶心呕吐"
|
||||
width="90"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-tag
|
||||
:type="row.nauseaVomiting?'danger':'success'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.nauseaVomiting?'是':'否' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="complications" label="并发症" min-width="150" show-overflow-tooltip/>
|
||||
<el-table-column prop="followupDoctorName" label="随访医生" width="100"/>
|
||||
<el-table-column
|
||||
prop="complications"
|
||||
label="并发症"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="followupDoctorName"
|
||||
label="随访医生"
|
||||
width="100"
|
||||
/>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="麻醉质控" name="qc">
|
||||
<el-card shadow="never" style="margin-bottom:12px">
|
||||
<el-tab-pane
|
||||
label="麻醉质控"
|
||||
name="qc"
|
||||
>
|
||||
<el-card
|
||||
shadow="never"
|
||||
style="margin-bottom:12px"
|
||||
>
|
||||
<div style="display:flex;gap:40px;text-align:center">
|
||||
<div><div style="font-size:28px;font-weight:bold;color:#409eff">{{ qcStats.total||0 }}</div><div>总记录</div></div>
|
||||
<div><div style="font-size:28px;font-weight:bold;color:#f56c6c">{{ qcStats.withComplications||0 }}</div><div>有并发症</div></div>
|
||||
<div>
|
||||
<div style="font-size:28px;font-weight:bold;color:#409eff">
|
||||
{{ qcStats.total||0 }}
|
||||
</div><div>总记录</div>
|
||||
</div>
|
||||
<div>
|
||||
<div style="font-size:28px;font-weight:bold;color:#f56c6c">
|
||||
{{ qcStats.withComplications||0 }}
|
||||
</div><div>有并发症</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<div style="margin-bottom:12px"><el-button type="success" @click="showQc=true">新增记录</el-button></div>
|
||||
<el-table :data="qcData" border stripe>
|
||||
<el-table-column prop="patientName" label="患者" width="90"/>
|
||||
<el-table-column prop="anesthesiaType" label="麻醉方式" width="100"/>
|
||||
<el-table-column prop="totalDurationMin" label="时长(分)" width="80" align="center"/>
|
||||
<el-table-column prop="bloodLossMl" label="出血量(ml)" width="90" align="center"/>
|
||||
<el-table-column prop="complications" label="并发症" min-width="150" show-overflow-tooltip/>
|
||||
<el-table-column prop="asaGrade" label="ASA分级" width="80" align="center"/>
|
||||
<div style="margin-bottom:12px">
|
||||
<el-button
|
||||
type="success"
|
||||
@click="showQc=true"
|
||||
>
|
||||
新增记录
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="qcData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
prop="patientName"
|
||||
label="患者"
|
||||
width="90"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="anesthesiaType"
|
||||
label="麻醉方式"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="totalDurationMin"
|
||||
label="时长(分)"
|
||||
width="80"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="bloodLossMl"
|
||||
label="出血量(ml)"
|
||||
width="90"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="complications"
|
||||
label="并发症"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="asaGrade"
|
||||
label="ASA分级"
|
||||
width="80"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<el-dialog v-model="showSpec" title="新增标本" width="500px">
|
||||
<el-form :model="specForm" label-width="100px">
|
||||
<el-form-item label="患者"><el-input v-model="specForm.patientName"/></el-form-item>
|
||||
<el-form-item label="标本类型"><el-input v-model="specForm.specimenType"/></el-form-item>
|
||||
<el-form-item label="标本名称"><el-input v-model="specForm.specimenName"/></el-form-item>
|
||||
<el-form-item label="采集人"><el-input v-model="specForm.collectorName"/></el-form-item>
|
||||
<el-dialog
|
||||
v-model="showSpec"
|
||||
title="新增标本"
|
||||
width="500px"
|
||||
>
|
||||
<el-form
|
||||
:model="specForm"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item label="患者">
|
||||
<el-input v-model="specForm.patientName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标本类型">
|
||||
<el-input v-model="specForm.specimenType" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标本名称">
|
||||
<el-input v-model="specForm.specimenName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="采集人">
|
||||
<el-input v-model="specForm.collectorName" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer><el-button @click="showSpec=false">取消</el-button><el-button type="primary" @click="submitSpec">保存</el-button></template>
|
||||
<template #footer>
|
||||
<el-button @click="showSpec=false">
|
||||
取消
|
||||
</el-button><el-button
|
||||
type="primary"
|
||||
@click="submitSpec"
|
||||
>
|
||||
保存
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -3,135 +3,370 @@
|
||||
<div style="margin-bottom:16px;display:flex;justify-content:space-between;align-items:center">
|
||||
<span style="font-size:18px;font-weight:bold">抗菌药物管理规则</span>
|
||||
<div>
|
||||
<el-button type="primary" @click="getList">刷新</el-button>
|
||||
<el-button type="success" @click="showAdd = true">新增规则</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="getList"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
@click="showAdd = true"
|
||||
>
|
||||
新增规则
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 统计卡片 -->
|
||||
<el-row :gutter="16" style="margin-bottom:16px">
|
||||
<el-row
|
||||
:gutter="16"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover" :body-style="{padding:'12px'}">
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'12px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:24px;font-weight:bold;color:#409eff">{{ stats.total || 0 }}</div>
|
||||
<div style="color:#999">总规则数</div>
|
||||
<div style="font-size:24px;font-weight:bold;color:#409eff">
|
||||
{{ stats.total || 0 }}
|
||||
</div>
|
||||
<div style="color:#999">
|
||||
总规则数
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover" :body-style="{padding:'12px'}">
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'12px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:24px;font-weight:bold;color:#67c23a">{{ stats.nonRestricted || 0 }}</div>
|
||||
<div style="color:#999">非限制使用</div>
|
||||
<div style="font-size:24px;font-weight:bold;color:#67c23a">
|
||||
{{ stats.nonRestricted || 0 }}
|
||||
</div>
|
||||
<div style="color:#999">
|
||||
非限制使用
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover" :body-style="{padding:'12px'}">
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'12px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:24px;font-weight:bold;color:#e6a23c">{{ stats.restricted || 0 }}</div>
|
||||
<div style="color:#999">限制使用</div>
|
||||
<div style="font-size:24px;font-weight:bold;color:#e6a23c">
|
||||
{{ stats.restricted || 0 }}
|
||||
</div>
|
||||
<div style="color:#999">
|
||||
限制使用
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover" :body-style="{padding:'12px'}">
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'12px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:24px;font-weight:bold;color:#f56c6c">{{ stats.special || 0 }}</div>
|
||||
<div style="color:#999">特殊使用</div>
|
||||
<div style="font-size:24px;font-weight:bold;color:#f56c6c">
|
||||
{{ stats.special || 0 }}
|
||||
</div>
|
||||
<div style="color:#999">
|
||||
特殊使用
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 筛选 -->
|
||||
<el-form :model="q" :inline="true" style="margin-bottom:16px">
|
||||
<el-form-item label="药品编码"><el-input v-model="q.drugCode" clearable placeholder="请输入药品编码" style="width:180px"/></el-form-item>
|
||||
<el-form
|
||||
:model="q"
|
||||
:inline="true"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-form-item label="药品编码">
|
||||
<el-input
|
||||
v-model="q.drugCode"
|
||||
clearable
|
||||
placeholder="请输入药品编码"
|
||||
style="width:180px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="抗菌类别">
|
||||
<el-select v-model="q.antibioticClass" clearable placeholder="请选择" style="width:140px">
|
||||
<el-option label="非限制使用" value="NONRESTRICTED"/>
|
||||
<el-option label="限制使用" value="RESTRICTED"/>
|
||||
<el-option label="特殊使用" value="SPECIAL"/>
|
||||
<el-select
|
||||
v-model="q.antibioticClass"
|
||||
clearable
|
||||
placeholder="请选择"
|
||||
style="width:140px"
|
||||
>
|
||||
<el-option
|
||||
label="非限制使用"
|
||||
value="NONRESTRICTED"
|
||||
/>
|
||||
<el-option
|
||||
label="限制使用"
|
||||
value="RESTRICTED"
|
||||
/>
|
||||
<el-option
|
||||
label="特殊使用"
|
||||
value="SPECIAL"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="getList">查询</el-button>
|
||||
<el-button @click="resetQuery">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="getList"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button @click="resetQuery">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<el-table v-loading="loading" :data="list" border stripe>
|
||||
<el-table-column label="药品编码" prop="drugCode" width="120"/>
|
||||
<el-table-column label="药品名称" prop="drugName" width="160" show-overflow-tooltip/>
|
||||
<el-table-column label="抗菌类别" prop="antibioticClass" width="120" align="center">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="list"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
label="药品编码"
|
||||
prop="drugCode"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="药品名称"
|
||||
prop="drugName"
|
||||
width="160"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="抗菌类别"
|
||||
prop="antibioticClass"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="s">
|
||||
<el-tag :type="s.row.antibioticClass==='SPECIAL'?'danger':s.row.antibioticClass==='RESTRICTED'?'warning':'success'" size="small">
|
||||
<el-tag
|
||||
:type="s.row.antibioticClass==='SPECIAL'?'danger':s.row.antibioticClass==='RESTRICTED'?'warning':'success'"
|
||||
size="small"
|
||||
>
|
||||
{{ {RESTRICTED:'限制使用',NONRESTRICTED:'非限制使用',SPECIAL:'特殊使用'}[s.row.antibioticClass] || s.row.antibioticClass }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="限制级别" prop="restrictionLevel" width="120" align="center"/>
|
||||
<el-table-column label="最大疗程(天)" prop="maxDurationDays" width="120" align="center"/>
|
||||
<el-table-column label="需审批" width="80" align="center">
|
||||
<el-table-column
|
||||
label="限制级别"
|
||||
prop="restrictionLevel"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="最大疗程(天)"
|
||||
prop="maxDurationDays"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="需审批"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="s">
|
||||
<el-tag :type="s.row.requireApproval?'danger':'success'" size="small">
|
||||
<el-tag
|
||||
:type="s.row.requireApproval?'danger':'success'"
|
||||
size="small"
|
||||
>
|
||||
{{ s.row.requireApproval?'是':'否' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="适应症" prop="indications" min-width="150" show-overflow-tooltip/>
|
||||
<el-table-column label="禁忌症" prop="contraindications" min-width="150" show-overflow-tooltip/>
|
||||
<el-table-column label="操作" width="100" fixed="right">
|
||||
<el-table-column
|
||||
label="适应症"
|
||||
prop="indications"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="禁忌症"
|
||||
prop="contraindications"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="100"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="s">
|
||||
<el-button link type="primary" @click="handleDetail(s.row)">详情</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleDetail(s.row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 新增弹窗 -->
|
||||
<el-dialog title="新增抗菌药物规则" v-model="showAdd" width="600px" append-to-body>
|
||||
<el-form :model="formData" label-width="110px">
|
||||
<el-form-item label="药品编码" required><el-input v-model="formData.drugCode" placeholder="请输入药品编码"/></el-form-item>
|
||||
<el-form-item label="药品名称" required><el-input v-model="formData.drugName" placeholder="请输入药品名称"/></el-form-item>
|
||||
<el-form-item label="抗菌类别" required>
|
||||
<el-select v-model="formData.antibioticClass" placeholder="请选择">
|
||||
<el-option label="非限制使用" value="NONRESTRICTED"/>
|
||||
<el-option label="限制使用" value="RESTRICTED"/>
|
||||
<el-option label="特殊使用" value="SPECIAL"/>
|
||||
<el-dialog
|
||||
v-model="showAdd"
|
||||
title="新增抗菌药物规则"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
:model="formData"
|
||||
label-width="110px"
|
||||
>
|
||||
<el-form-item
|
||||
label="药品编码"
|
||||
required
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.drugCode"
|
||||
placeholder="请输入药品编码"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="药品名称"
|
||||
required
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.drugName"
|
||||
placeholder="请输入药品名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="抗菌类别"
|
||||
required
|
||||
>
|
||||
<el-select
|
||||
v-model="formData.antibioticClass"
|
||||
placeholder="请选择"
|
||||
>
|
||||
<el-option
|
||||
label="非限制使用"
|
||||
value="NONRESTRICTED"
|
||||
/>
|
||||
<el-option
|
||||
label="限制使用"
|
||||
value="RESTRICTED"
|
||||
/>
|
||||
<el-option
|
||||
label="特殊使用"
|
||||
value="SPECIAL"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="限制级别"><el-input v-model="formData.restrictionLevel" placeholder="如: 副主任医师以上"/></el-form-item>
|
||||
<el-form-item label="最大疗程(天)"><el-input-number v-model="formData.maxDurationDays" :min="1" :max="365"/></el-form-item>
|
||||
<el-form-item label="需审批">
|
||||
<el-switch v-model="formData.requireApproval"/>
|
||||
<el-form-item label="限制级别">
|
||||
<el-input
|
||||
v-model="formData.restrictionLevel"
|
||||
placeholder="如: 副主任医师以上"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="最大疗程(天)">
|
||||
<el-input-number
|
||||
v-model="formData.maxDurationDays"
|
||||
:min="1"
|
||||
:max="365"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="需审批">
|
||||
<el-switch v-model="formData.requireApproval" />
|
||||
</el-form-item>
|
||||
<el-form-item label="适应症">
|
||||
<el-input
|
||||
v-model="formData.indications"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="请输入适应症"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="禁忌症">
|
||||
<el-input
|
||||
v-model="formData.contraindications"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="请输入禁忌症"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="适应症"><el-input v-model="formData.indications" type="textarea" :rows="2" placeholder="请输入适应症"/></el-form-item>
|
||||
<el-form-item label="禁忌症"><el-input v-model="formData.contraindications" type="textarea" :rows="2" placeholder="请输入禁忌症"/></el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="showAdd = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="showAdd = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<el-dialog title="抗菌药物规则详情" v-model="detailVisible" width="600px" append-to-body>
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="药品编码">{{ detailData.drugCode }}</el-descriptions-item>
|
||||
<el-descriptions-item label="药品名称">{{ detailData.drugName }}</el-descriptions-item>
|
||||
<el-dialog
|
||||
v-model="detailVisible"
|
||||
title="抗菌药物规则详情"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-descriptions
|
||||
:column="2"
|
||||
border
|
||||
>
|
||||
<el-descriptions-item label="药品编码">
|
||||
{{ detailData.drugCode }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="药品名称">
|
||||
{{ detailData.drugName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="抗菌类别">
|
||||
<el-tag :type="detailData.antibioticClass==='SPECIAL'?'danger':detailData.antibioticClass==='RESTRICTED'?'warning':'success'">
|
||||
{{ {RESTRICTED:'限制使用',NONRESTRICTED:'非限制使用',SPECIAL:'特殊使用'}[detailData.antibioticClass] }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="限制级别">{{ detailData.restrictionLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="最大疗程">{{ detailData.maxDurationDays }}天</el-descriptions-item>
|
||||
<el-descriptions-item label="需审批">{{ detailData.requireApproval ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="适应症" :span="2">{{ detailData.indications || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="禁忌症" :span="2">{{ detailData.contraindications || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="限制级别">
|
||||
{{ detailData.restrictionLevel }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最大疗程">
|
||||
{{ detailData.maxDurationDays }}天
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需审批">
|
||||
{{ detailData.requireApproval ? '是' : '否' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="适应症"
|
||||
:span="2"
|
||||
>
|
||||
{{ detailData.indications || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="禁忌症"
|
||||
:span="2"
|
||||
>
|
||||
{{ detailData.contraindications || '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<template #footer><el-button @click="detailVisible = false">关闭</el-button></template>
|
||||
<template #footer>
|
||||
<el-button @click="detailVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -3,18 +3,45 @@
|
||||
<div style="margin-bottom:16px;display:flex;justify-content:space-between;align-items:center">
|
||||
<span style="font-size:18px;font-weight:bold">接口安全认证管理</span>
|
||||
<div>
|
||||
<el-button type="primary" @click="loadData">刷新</el-button>
|
||||
<el-button type="success" @click="showAdd = true">新增应用</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="loadData"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
@click="showAdd = true"
|
||||
>
|
||||
新增应用
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 统计卡片 -->
|
||||
<el-row :gutter="16" style="margin-bottom:16px">
|
||||
<el-col :span="4" v-for="item in statCards" :key="item.label">
|
||||
<el-card shadow="hover" :body-style="{padding:'10px'}">
|
||||
<el-row
|
||||
:gutter="16"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-col
|
||||
v-for="item in statCards"
|
||||
:key="item.label"
|
||||
:span="4"
|
||||
>
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'10px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:20px;font-weight:bold" :style="{color:item.color}">{{ item.value }}</div>
|
||||
<div style="font-size:12px;color:#999">{{ item.label }}</div>
|
||||
<div
|
||||
style="font-size:20px;font-weight:bold"
|
||||
:style="{color:item.color}"
|
||||
>
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<div style="font-size:12px;color:#999">
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
@@ -22,85 +49,256 @@
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div style="margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap">
|
||||
<el-select v-model="q.status" placeholder="状态" clearable style="width:100px">
|
||||
<el-option label="启用" :value="0"/>
|
||||
<el-option label="禁用" :value="1"/>
|
||||
<el-select
|
||||
v-model="q.status"
|
||||
placeholder="状态"
|
||||
clearable
|
||||
style="width:100px"
|
||||
>
|
||||
<el-option
|
||||
label="启用"
|
||||
:value="0"
|
||||
/>
|
||||
<el-option
|
||||
label="禁用"
|
||||
:value="1"
|
||||
/>
|
||||
</el-select>
|
||||
<el-button type="primary" @click="loadData">查询</el-button>
|
||||
<el-button @click="q.status='';loadData()">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="loadData"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button @click="q.status='';loadData()">
|
||||
重置
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<el-table :data="authData" border stripe v-loading="loading">
|
||||
<el-table-column type="index" label="序号" width="60" align="center"/>
|
||||
<el-table-column prop="appName" label="应用名称" width="150"/>
|
||||
<el-table-column prop="appKey" label="AppKey" width="200" show-overflow-tooltip>
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="authData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="60"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="appName"
|
||||
label="应用名称"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="appKey"
|
||||
label="AppKey"
|
||||
width="200"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span style="font-family:monospace;font-size:12px">{{ row.appKey }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="appSecret" label="AppSecret" width="180" show-overflow-tooltip>
|
||||
<el-table-column
|
||||
prop="appSecret"
|
||||
label="AppSecret"
|
||||
width="180"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span style="font-family:monospace;font-size:12px">••••••••</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="rateLimit" label="限流(次/分)" width="110" align="center"/>
|
||||
<el-table-column prop="status" label="状态" width="80" align="center">
|
||||
<el-table-column
|
||||
prop="rateLimit"
|
||||
label="限流(次/分)"
|
||||
width="110"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
label="状态"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-tag :type="row.status===0?'success':'danger'" size="small">
|
||||
<el-tag
|
||||
:type="row.status===0?'success':'danger'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.status===0?'启用':'禁用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="lastAccessTime" label="最后访问" width="170"/>
|
||||
<el-table-column prop="createTime" label="创建时间" width="170"/>
|
||||
<el-table-column label="操作" width="120" fixed="right">
|
||||
<el-table-column
|
||||
prop="lastAccessTime"
|
||||
label="最后访问"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="创建时间"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-button link type="primary" @click="handleDetail(row)">详情</el-button>
|
||||
<el-button v-if="row.status===0" type="danger" link size="small" @click="handleDisable(row)">禁用</el-button>
|
||||
<el-button v-else type="success" link size="small" @click="handleEnable(row)">启用</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleDetail(row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status===0"
|
||||
type="danger"
|
||||
link
|
||||
size="small"
|
||||
@click="handleDisable(row)"
|
||||
>
|
||||
禁用
|
||||
</el-button>
|
||||
<el-button
|
||||
v-else
|
||||
type="success"
|
||||
link
|
||||
size="small"
|
||||
@click="handleEnable(row)"
|
||||
>
|
||||
启用
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-pagination style="margin-top:12px;justify-content:flex-end" v-model:current-page="q.pageNo" v-model:page-size="q.pageSize" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="loadData" @current-change="loadData"/>
|
||||
<el-pagination
|
||||
v-model:current-page="q.pageNo"
|
||||
v-model:page-size="q.pageSize"
|
||||
style="margin-top:12px;justify-content:flex-end"
|
||||
:total="total"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@size-change="loadData"
|
||||
@current-change="loadData"
|
||||
/>
|
||||
|
||||
<!-- 新增弹窗 -->
|
||||
<el-dialog title="新增API应用" v-model="showAdd" width="600px" append-to-body>
|
||||
<el-form :model="formData" label-width="110px">
|
||||
<el-form-item label="应用名称" required><el-input v-model="formData.appName" placeholder="请输入应用名称"/></el-form-item>
|
||||
<el-form-item label="应用描述"><el-input v-model="formData.description" type="textarea" :rows="2" placeholder="请输入应用描述"/></el-form-item>
|
||||
<el-form-item label="限流(次/分)"><el-input-number v-model="formData.rateLimit" :min="1" :max="10000"/></el-form-item>
|
||||
<el-form-item label="IP白名单"><el-input v-model="formData.ipWhitelist" type="textarea" :rows="2" placeholder="多个IP用逗号分隔,留空不限制"/></el-form-item>
|
||||
<el-dialog
|
||||
v-model="showAdd"
|
||||
title="新增API应用"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
:model="formData"
|
||||
label-width="110px"
|
||||
>
|
||||
<el-form-item
|
||||
label="应用名称"
|
||||
required
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.appName"
|
||||
placeholder="请输入应用名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="应用描述">
|
||||
<el-input
|
||||
v-model="formData.description"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="请输入应用描述"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="限流(次/分)">
|
||||
<el-input-number
|
||||
v-model="formData.rateLimit"
|
||||
:min="1"
|
||||
:max="10000"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="IP白名单">
|
||||
<el-input
|
||||
v-model="formData.ipWhitelist"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="多个IP用逗号分隔,留空不限制"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="权限范围">
|
||||
<el-checkbox-group v-model="formData.permissions">
|
||||
<el-checkbox value="read">只读</el-checkbox>
|
||||
<el-checkbox value="write">读写</el-checkbox>
|
||||
<el-checkbox value="admin">管理</el-checkbox>
|
||||
<el-checkbox value="read">
|
||||
只读
|
||||
</el-checkbox>
|
||||
<el-checkbox value="write">
|
||||
读写
|
||||
</el-checkbox>
|
||||
<el-checkbox value="admin">
|
||||
管理
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="showAdd = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="showAdd = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<el-dialog title="API应用详情" v-model="detailVisible" width="600px" append-to-body>
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="应用名称">{{ detailData.appName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="状态">
|
||||
<el-tag :type="detailData.status===0?'success':'danger'">{{ detailData.status===0?'启用':'禁用' }}</el-tag>
|
||||
<el-dialog
|
||||
v-model="detailVisible"
|
||||
title="API应用详情"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-descriptions
|
||||
:column="2"
|
||||
border
|
||||
>
|
||||
<el-descriptions-item label="应用名称">
|
||||
{{ detailData.appName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="AppKey" :span="2">
|
||||
<el-descriptions-item label="状态">
|
||||
<el-tag :type="detailData.status===0?'success':'danger'">
|
||||
{{ detailData.status===0?'启用':'禁用' }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="AppKey"
|
||||
:span="2"
|
||||
>
|
||||
<span style="font-family:monospace">{{ detailData.appKey }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="限流">{{ detailData.rateLimit }} 次/分钟</el-descriptions-item>
|
||||
<el-descriptions-item label="最后访问">{{ detailData.lastAccessTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">{{ detailData.createTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="限流">
|
||||
{{ detailData.rateLimit }} 次/分钟
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最后访问">
|
||||
{{ detailData.lastAccessTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">
|
||||
{{ detailData.createTime }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<template #footer><el-button @click="detailVisible = false">关闭</el-button></template>
|
||||
<template #footer>
|
||||
<el-button @click="detailVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -3,69 +3,158 @@
|
||||
<div style="margin-bottom:16px;display:flex;justify-content:space-between;align-items:center">
|
||||
<span style="font-size:18px;font-weight:bold">护理评估趋势分析</span>
|
||||
<div>
|
||||
<el-button type="primary" @click="loadData">查询</el-button>
|
||||
<el-button type="warning" @click="exportReport">导出报告</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="loadData"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button
|
||||
type="warning"
|
||||
@click="exportReport"
|
||||
>
|
||||
导出报告
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 查询表单 -->
|
||||
<el-card shadow="never" style="margin-bottom:16px">
|
||||
<el-card
|
||||
shadow="never"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-form inline>
|
||||
<el-form-item label="就诊号"><el-input v-model="encounterId" placeholder="请输入就诊号" style="width:180px"/></el-form-item>
|
||||
<el-form-item label="就诊号">
|
||||
<el-input
|
||||
v-model="encounterId"
|
||||
placeholder="请输入就诊号"
|
||||
style="width:180px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="评估类型">
|
||||
<el-select v-model="assessmentType" clearable placeholder="请选择" style="width:140px">
|
||||
<el-option label="压疮评估(Braden)" value="BRADEN"/>
|
||||
<el-option label="跌倒评估(Morse)" value="MORSE"/>
|
||||
<el-option label="营养筛查(NRS2002)" value="NRS2002"/>
|
||||
<el-option label="疼痛评估" value="PAIN"/>
|
||||
<el-option label="管道风险" value="TUBE"/>
|
||||
<el-select
|
||||
v-model="assessmentType"
|
||||
clearable
|
||||
placeholder="请选择"
|
||||
style="width:140px"
|
||||
>
|
||||
<el-option
|
||||
label="压疮评估(Braden)"
|
||||
value="BRADEN"
|
||||
/>
|
||||
<el-option
|
||||
label="跌倒评估(Morse)"
|
||||
value="MORSE"
|
||||
/>
|
||||
<el-option
|
||||
label="营养筛查(NRS2002)"
|
||||
value="NRS2002"
|
||||
/>
|
||||
<el-option
|
||||
label="疼痛评估"
|
||||
value="PAIN"
|
||||
/>
|
||||
<el-option
|
||||
label="管道风险"
|
||||
value="TUBE"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="日期范围">
|
||||
<el-date-picker v-model="dateRange" type="daterange" start-placeholder="开始" end-placeholder="结束" style="width:240px"/>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
start-placeholder="开始"
|
||||
end-placeholder="结束"
|
||||
style="width:240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<!-- 统计卡片 -->
|
||||
<el-row :gutter="16" style="margin-bottom:16px">
|
||||
<el-col :span="4" v-for="item in statCards" :key="item.label">
|
||||
<el-card shadow="hover" :body-style="{padding:'10px'}">
|
||||
<el-row
|
||||
:gutter="16"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-col
|
||||
v-for="item in statCards"
|
||||
:key="item.label"
|
||||
:span="4"
|
||||
>
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'10px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:20px;font-weight:bold" :style="{color:item.color}">{{ item.value }}</div>
|
||||
<div style="font-size:12px;color:#999">{{ item.label }}</div>
|
||||
<div
|
||||
style="font-size:20px;font-weight:bold"
|
||||
:style="{color:item.color}"
|
||||
>
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<div style="font-size:12px;color:#999">
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 趋势图表区域 -->
|
||||
<el-row :gutter="16" style="margin-bottom:16px">
|
||||
<el-row
|
||||
:gutter="16"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-col :span="12">
|
||||
<el-card shadow="never">
|
||||
<template #header>评估评分趋势</template>
|
||||
<template #header>
|
||||
评估评分趋势
|
||||
</template>
|
||||
<div style="height:300px;display:flex;align-items:center;justify-content:center;flex-direction:column">
|
||||
<div v-if="trendData.length > 0" style="width:100%;padding:20px">
|
||||
<div v-for="(item, index) in trendData.slice(0, 10)" :key="index" style="display:flex;align-items:center;margin-bottom:8px">
|
||||
<div
|
||||
v-if="trendData.length > 0"
|
||||
style="width:100%;padding:20px"
|
||||
>
|
||||
<div
|
||||
v-for="(item, index) in trendData.slice(0, 10)"
|
||||
:key="index"
|
||||
style="display:flex;align-items:center;margin-bottom:8px"
|
||||
>
|
||||
<span style="width:80px;font-size:12px;color:#666">{{ item.assessmentType }}</span>
|
||||
<div style="flex:1;background:#f0f0f0;border-radius:4px;height:20px">
|
||||
<div :style="{width: Math.min(item.score * 10, 100) + '%', background: item.riskLevel === 'HIGH' ? '#F56C6C' : item.riskLevel === 'MEDIUM' ? '#E6A23C' : '#67C23A', height: '100%', borderRadius: '4px'}"></div>
|
||||
<div :style="{width: Math.min(item.score * 10, 100) + '%', background: item.riskLevel === 'HIGH' ? '#F56C6C' : item.riskLevel === 'MEDIUM' ? '#E6A23C' : '#67C23A', height: '100%', borderRadius: '4px'}" />
|
||||
</div>
|
||||
<span style="width:40px;text-align:right;font-size:12px;font-weight:bold">{{ item.score }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<el-empty v-else description="暂无数据"/>
|
||||
<el-empty
|
||||
v-else
|
||||
description="暂无数据"
|
||||
/>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-card shadow="never">
|
||||
<template #header>风险等级分布</template>
|
||||
<template #header>
|
||||
风险等级分布
|
||||
</template>
|
||||
<div style="height:300px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px">
|
||||
<div v-for="(item, index) in riskDistribution" :key="index" style="display:flex;align-items:center;gap:8px">
|
||||
<el-tag :type="item.type" size="small" style="width:60px;text-align:center">{{ item.level }}</el-tag>
|
||||
<div
|
||||
v-for="(item, index) in riskDistribution"
|
||||
:key="index"
|
||||
style="display:flex;align-items:center;gap:8px"
|
||||
>
|
||||
<el-tag
|
||||
:type="item.type"
|
||||
size="small"
|
||||
style="width:60px;text-align:center"
|
||||
>
|
||||
{{ item.level }}
|
||||
</el-tag>
|
||||
<div style="width:200px;background:#f0f0f0;border-radius:4px;height:24px">
|
||||
<div :style="{width: item.percent + '%', background: item.color, height: '100%', borderRadius: '4px', transition: 'width 0.5s'}"></div>
|
||||
<div :style="{width: item.percent + '%', background: item.color, height: '100%', borderRadius: '4px', transition: 'width 0.5s'}" />
|
||||
</div>
|
||||
<span style="font-size:13px;font-weight:bold">{{ item.count }}人 ({{ item.percent }}%)</span>
|
||||
</div>
|
||||
@@ -76,32 +165,81 @@
|
||||
|
||||
<!-- 评估记录表 -->
|
||||
<el-card shadow="never">
|
||||
<template #header>评估记录明细</template>
|
||||
<el-table :data="trendData" border stripe v-loading="loading">
|
||||
<el-table-column type="index" label="序号" width="60" align="center"/>
|
||||
<el-table-column prop="assessmentType" label="评估类型" width="120" align="center">
|
||||
<template #header>
|
||||
评估记录明细
|
||||
</template>
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="trendData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="60"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="assessmentType"
|
||||
label="评估类型"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-tag size="small">{{ assessmentTypeText(row.assessmentType) }}</el-tag>
|
||||
<el-tag size="small">
|
||||
{{ assessmentTypeText(row.assessmentType) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="patientName" label="患者" width="100"/>
|
||||
<el-table-column prop="score" label="评分" width="80" align="center">
|
||||
<el-table-column
|
||||
prop="patientName"
|
||||
label="患者"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="score"
|
||||
label="评分"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span :style="{color: row.riskLevel === 'HIGH' ? '#F56C6C' : row.riskLevel === 'MEDIUM' ? '#E6A23C' : '#67C23A', fontWeight:'bold', fontSize:'16px'}">
|
||||
{{ row.score }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="riskLevel" label="风险等级" width="100" align="center">
|
||||
<el-table-column
|
||||
prop="riskLevel"
|
||||
label="风险等级"
|
||||
width="100"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-tag :type="{HIGH:'danger',MEDIUM:'warning',LOW:'success',NORMAL:'info'}[row.riskLevel]" size="small">
|
||||
<el-tag
|
||||
:type="{HIGH:'danger',MEDIUM:'warning',LOW:'success',NORMAL:'info'}[row.riskLevel]"
|
||||
size="small"
|
||||
>
|
||||
{{ riskLevelText(row.riskLevel) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="assessTime" label="评估时间" width="170"/>
|
||||
<el-table-column prop="assessorName" label="评估人" width="100"/>
|
||||
<el-table-column prop="detail" label="评估备注" min-width="150" show-overflow-tooltip/>
|
||||
<el-table-column
|
||||
prop="assessTime"
|
||||
label="评估时间"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="assessorName"
|
||||
label="评估人"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="detail"
|
||||
label="评估备注"
|
||||
min-width="150"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
@@ -1,51 +1,195 @@
|
||||
<template>
|
||||
<div style="padding:16px">
|
||||
<div style="margin-bottom:16px"><span style="font-size:18px;font-weight:bold">审计日志</span></div>
|
||||
<div style="margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap">
|
||||
<el-input v-model="q.userName" placeholder="用户名" clearable style="width:120px"/>
|
||||
<el-input v-model="q.module" placeholder="模块" clearable style="width:120px"/>
|
||||
<el-input v-model="q.action" placeholder="操作" clearable style="width:120px"/>
|
||||
<el-select v-model="q.result" placeholder="结果" clearable style="width:100px">
|
||||
<el-option label="成功" value="SUCCESS"/>
|
||||
<el-option label="失败" value="FAIL"/>
|
||||
</el-select>
|
||||
<el-button type="primary" @click="loadData">查询</el-button>
|
||||
<div style="margin-bottom:16px">
|
||||
<span style="font-size:18px;font-weight:bold">审计日志</span>
|
||||
</div>
|
||||
<el-table :data="tableData" border stripe>
|
||||
<el-table-column prop="userName" label="用户" width="100"/>
|
||||
<el-table-column prop="module" label="模块" width="120"/>
|
||||
<el-table-column prop="action" label="操作" width="100"/>
|
||||
<el-table-column prop="method" label="方法" width="70" align="center"/>
|
||||
<el-table-column prop="url" label="URL" min-width="200" show-overflow-tooltip/>
|
||||
<el-table-column prop="ip" label="IP" width="120"/>
|
||||
<el-table-column prop="result" label="结果" width="80" align="center">
|
||||
<div style="margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap">
|
||||
<el-input
|
||||
v-model="q.userName"
|
||||
placeholder="用户名"
|
||||
clearable
|
||||
style="width:120px"
|
||||
/>
|
||||
<el-input
|
||||
v-model="q.module"
|
||||
placeholder="模块"
|
||||
clearable
|
||||
style="width:120px"
|
||||
/>
|
||||
<el-input
|
||||
v-model="q.action"
|
||||
placeholder="操作"
|
||||
clearable
|
||||
style="width:120px"
|
||||
/>
|
||||
<el-select
|
||||
v-model="q.result"
|
||||
placeholder="结果"
|
||||
clearable
|
||||
style="width:100px"
|
||||
>
|
||||
<el-option
|
||||
label="成功"
|
||||
value="SUCCESS"
|
||||
/>
|
||||
<el-option
|
||||
label="失败"
|
||||
value="FAIL"
|
||||
/>
|
||||
</el-select>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="loadData"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
prop="userName"
|
||||
label="用户"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="module"
|
||||
label="模块"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="action"
|
||||
label="操作"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="method"
|
||||
label="方法"
|
||||
width="70"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="url"
|
||||
label="URL"
|
||||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="ip"
|
||||
label="IP"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="result"
|
||||
label="结果"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-tag v-if="row.result==='SUCCESS'" type="success" size="small">成功</el-tag>
|
||||
<el-tag v-else type="danger" size="small">失败</el-tag>
|
||||
<el-tag
|
||||
v-if="row.result==='SUCCESS'"
|
||||
type="success"
|
||||
size="small"
|
||||
>
|
||||
成功
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else
|
||||
type="danger"
|
||||
size="small"
|
||||
>
|
||||
失败
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="durationMs" label="耗时ms" width="80" align="center"/>
|
||||
<el-table-column prop="createTime" label="时间" width="170"/>
|
||||
<el-table-column label="操作" width="80">
|
||||
<el-table-column
|
||||
prop="durationMs"
|
||||
label="耗时ms"
|
||||
width="80"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="时间"
|
||||
width="170"
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="80"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<el-popconfirm title="确定删除?" @confirm="delItem(row.id)">
|
||||
<template #reference><el-button type="danger" link size="small">删除</el-button></template>
|
||||
<el-popconfirm
|
||||
title="确定删除?"
|
||||
@confirm="delItem(row.id)"
|
||||
>
|
||||
<template #reference>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
size="small"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination style="margin-top:12px;justify-content:flex-end" v-model:current-page="q.pageNo" v-model:page-size="q.pageSize" :total="total" layout="total,prev,pager,next" @current-change="loadData"/>
|
||||
<el-dialog v-model="detailVisible" title="审计日志详情" width="600px">
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="用户">{{ detail.userName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="模块">{{ detail.module }}</el-descriptions-item>
|
||||
<el-descriptions-item label="操作">{{ detail.action }}</el-descriptions-item>
|
||||
<el-descriptions-item label="方法">{{ detail.method }}</el-descriptions-item>
|
||||
<el-descriptions-item label="URL" :span="2">{{ detail.url }}</el-descriptions-item>
|
||||
<el-descriptions-item label="IP">{{ detail.ip }}</el-descriptions-item>
|
||||
<el-descriptions-item label="耗时">{{ detail.durationMs }}ms</el-descriptions-item>
|
||||
<el-descriptions-item label="参数" :span="2">{{ detail.params }}</el-descriptions-item>
|
||||
<el-descriptions-item label="错误" :span="2">{{ detail.errorMsg }}</el-descriptions-item>
|
||||
<el-pagination
|
||||
v-model:current-page="q.pageNo"
|
||||
v-model:page-size="q.pageSize"
|
||||
style="margin-top:12px;justify-content:flex-end"
|
||||
:total="total"
|
||||
layout="total,prev,pager,next"
|
||||
@current-change="loadData"
|
||||
/>
|
||||
<el-dialog
|
||||
v-model="detailVisible"
|
||||
title="审计日志详情"
|
||||
width="600px"
|
||||
>
|
||||
<el-descriptions
|
||||
:column="2"
|
||||
border
|
||||
>
|
||||
<el-descriptions-item label="用户">
|
||||
{{ detail.userName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="模块">
|
||||
{{ detail.module }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="操作">
|
||||
{{ detail.action }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="方法">
|
||||
{{ detail.method }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="URL"
|
||||
:span="2"
|
||||
>
|
||||
{{ detail.url }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="IP">
|
||||
{{ detail.ip }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="耗时">
|
||||
{{ detail.durationMs }}ms
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="参数"
|
||||
:span="2"
|
||||
>
|
||||
{{ detail.params }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
label="错误"
|
||||
:span="2"
|
||||
>
|
||||
{{ detail.errorMsg }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -1,27 +1,85 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">自动计算</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">自动计算</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="code" title="编码" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="code"
|
||||
title="编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -1,27 +1,85 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">划价组套</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">划价组套</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="code" title="编码" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="code"
|
||||
title="编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -4,71 +4,268 @@
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="card-title">床位管理</span>
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">新增床位</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增床位
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-form :inline="true" :model="queryParams" label-width="80px">
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="床号">
|
||||
<el-input v-model="queryParams.bedNo" placeholder="床号" clearable @keyup.enter="handleQuery" style="width: 140px" />
|
||||
<el-input
|
||||
v-model="queryParams.bedNo"
|
||||
placeholder="床号"
|
||||
clearable
|
||||
style="width: 140px"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="queryParams.status" placeholder="全部" clearable style="width: 120px">
|
||||
<el-option label="空闲" :value="0" /><el-option label="占用" :value="1" />
|
||||
<el-option label="清洁" :value="2" /><el-option label="维修" :value="3" />
|
||||
<el-select
|
||||
v-model="queryParams.status"
|
||||
placeholder="全部"
|
||||
clearable
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option
|
||||
label="空闲"
|
||||
:value="0"
|
||||
/><el-option
|
||||
label="占用"
|
||||
:value="1"
|
||||
/>
|
||||
<el-option
|
||||
label="清洁"
|
||||
:value="2"
|
||||
/><el-option
|
||||
label="维修"
|
||||
:value="3"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="resetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 320px)" v-loading="loading">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="bedNo" title="床号" width="100" />
|
||||
<vxe-column field="bedName" title="床位名" width="120" />
|
||||
<vxe-column field="wardName" title="病区" width="120" />
|
||||
<vxe-column field="deptName" title="科室" width="120" />
|
||||
<vxe-column field="bedType" title="类型" width="80" align="center">
|
||||
<vxe-table
|
||||
v-loading="loading"
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 320px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="bedNo"
|
||||
title="床号"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="bedName"
|
||||
title="床位名"
|
||||
width="120"
|
||||
/>
|
||||
<vxe-column
|
||||
field="wardName"
|
||||
title="病区"
|
||||
width="120"
|
||||
/>
|
||||
<vxe-column
|
||||
field="deptName"
|
||||
title="科室"
|
||||
width="120"
|
||||
/>
|
||||
<vxe-column
|
||||
field="bedType"
|
||||
title="类型"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.bedType === 2 ? 'danger' : row.bedType === 3 ? 'warning' : 'info'" size="small">
|
||||
<el-tag
|
||||
:type="row.bedType === 2 ? 'danger' : row.bedType === 3 ? 'warning' : 'info'"
|
||||
size="small"
|
||||
>
|
||||
{{ { 1: '普通', 2: 'ICU', 3: '急诊' }[row.bedType] || '普通' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="status" title="状态" width="80" align="center">
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="statusType(row.status)" size="small">{{ statusText(row.status) }}</el-tag>
|
||||
<el-tag
|
||||
:type="statusType(row.status)"
|
||||
size="small"
|
||||
>
|
||||
{{ statusText(row.status) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="220" fixed="right">
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="220"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link icon="Edit" @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button v-if="row.status === 0" type="warning" link @click="changeStatus(row, 1)">占用</el-button>
|
||||
<el-button v-if="row.status === 1" type="success" link @click="changeStatus(row, 2)">清洁</el-button>
|
||||
<el-button v-if="row.status === 2" type="info" link @click="changeStatus(row, 0)">空闲</el-button>
|
||||
<el-button v-if="row.status !== 3" type="danger" link @click="changeStatus(row, 3)">维修</el-button>
|
||||
<el-button type="danger" link icon="Delete" @click="handleDelete(row)">删除</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Edit"
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status === 0"
|
||||
type="warning"
|
||||
link
|
||||
@click="changeStatus(row, 1)"
|
||||
>
|
||||
占用
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status === 1"
|
||||
type="success"
|
||||
link
|
||||
@click="changeStatus(row, 2)"
|
||||
>
|
||||
清洁
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status === 2"
|
||||
type="info"
|
||||
link
|
||||
@click="changeStatus(row, 0)"
|
||||
>
|
||||
空闲
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status !== 3"
|
||||
type="danger"
|
||||
link
|
||||
@click="changeStatus(row, 3)"
|
||||
>
|
||||
维修
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
icon="Delete"
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<pagination v-show="total > 0" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
<el-dialog v-model="formVisible" :title="formTitle" width="550px" append-to-body>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="床号" prop="bedNo"><el-input v-model="form.bedNo" placeholder="床号" /></el-form-item>
|
||||
<el-form-item label="床位名"><el-input v-model="form.bedName" placeholder="床位名" /></el-form-item>
|
||||
<el-form-item label="病区"><el-input v-model="form.wardName" placeholder="病区" /></el-form-item>
|
||||
<el-form-item label="科室"><el-input v-model="form.deptName" placeholder="科室" /></el-form-item>
|
||||
<el-dialog
|
||||
v-model="formVisible"
|
||||
:title="formTitle"
|
||||
width="550px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item
|
||||
label="床号"
|
||||
prop="bedNo"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.bedNo"
|
||||
placeholder="床号"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="床位名">
|
||||
<el-input
|
||||
v-model="form.bedName"
|
||||
placeholder="床位名"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="病区">
|
||||
<el-input
|
||||
v-model="form.wardName"
|
||||
placeholder="病区"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="科室">
|
||||
<el-input
|
||||
v-model="form.deptName"
|
||||
placeholder="科室"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="form.bedType" style="width:100%">
|
||||
<el-option label="普通" :value="1" /><el-option label="ICU" :value="2" /><el-option label="急诊" :value="3" />
|
||||
<el-select
|
||||
v-model="form.bedType"
|
||||
style="width:100%"
|
||||
>
|
||||
<el-option
|
||||
label="普通"
|
||||
:value="1"
|
||||
/><el-option
|
||||
label="ICU"
|
||||
:value="2"
|
||||
/><el-option
|
||||
label="急诊"
|
||||
:value="3"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注"><el-input v-model="form.remark" type="textarea" :rows="2" /></el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="formVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="formVisible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -94,7 +94,8 @@
|
||||
<el-radio
|
||||
v-for="item in props.useRanges"
|
||||
:key="item.value"
|
||||
v-model="formData.useRangeEnum" :value="item.value"
|
||||
v-model="formData.useRangeEnum"
|
||||
:value="item.value"
|
||||
>
|
||||
{{ item.info }}
|
||||
</el-radio>
|
||||
|
||||
@@ -209,7 +209,8 @@
|
||||
<el-radio-group v-model="form.typeEnum">
|
||||
<el-radio
|
||||
v-for="dict in typeEnumsOptions"
|
||||
:key="dict.value" :value="dict.value"
|
||||
:key="dict.value"
|
||||
:value="dict.value"
|
||||
>
|
||||
{{
|
||||
dict.info
|
||||
|
||||
@@ -4,52 +4,191 @@
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="card-title">常用诊断</span>
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">新增诊断</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增诊断
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-form :inline="true" :model="queryParams" label-width="80px">
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="关键字">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="诊断名称/编码" clearable @keyup.enter="handleQuery" style="width: 200px" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="诊断名称/编码"
|
||||
clearable
|
||||
style="width: 200px"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="resetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 320px)" v-loading="loading">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="conditionCode" title="编码" width="120" />
|
||||
<vxe-column field="name" title="诊断名称" min-width="200" show-overflow="title" />
|
||||
<vxe-column field="typeCode" title="类型" width="100" />
|
||||
<vxe-column field="status" title="状态" width="80" align="center">
|
||||
<vxe-table
|
||||
v-loading="loading"
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 320px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="conditionCode"
|
||||
title="编码"
|
||||
width="120"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="诊断名称"
|
||||
min-width="200"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="typeCode"
|
||||
title="类型"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'" size="small">{{ row.status === '0' ? '启用' : '停用' }}</el-tag>
|
||||
<el-tag
|
||||
:type="row.status === '0' ? 'success' : 'info'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.status === '0' ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="180" fixed="right">
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="180"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link icon="Edit" @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button v-if="row.status === '0'" type="warning" link @click="handleStop(row)">停用</el-button>
|
||||
<el-button v-else type="success" link @click="handleStart(row)">启用</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Edit"
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.status === '0'"
|
||||
type="warning"
|
||||
link
|
||||
@click="handleStop(row)"
|
||||
>
|
||||
停用
|
||||
</el-button>
|
||||
<el-button
|
||||
v-else
|
||||
type="success"
|
||||
link
|
||||
@click="handleStart(row)"
|
||||
>
|
||||
启用
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<pagination v-show="total > 0" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
<el-dialog v-model="formVisible" :title="formTitle" width="600px" append-to-body>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="诊断编码" prop="conditionCode"><el-input v-model="form.conditionCode" placeholder="诊断编码" /></el-form-item>
|
||||
<el-form-item label="诊断名称" prop="name"><el-input v-model="form.name" placeholder="诊断名称" /></el-form-item>
|
||||
<el-form-item label="拼音首字母"><el-input v-model="form.pyStr" placeholder="拼音首字母" /></el-form-item>
|
||||
<el-dialog
|
||||
v-model="formVisible"
|
||||
:title="formTitle"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item
|
||||
label="诊断编码"
|
||||
prop="conditionCode"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.conditionCode"
|
||||
placeholder="诊断编码"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="诊断名称"
|
||||
prop="name"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="诊断名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="拼音首字母">
|
||||
<el-input
|
||||
v-model="form.pyStr"
|
||||
placeholder="拼音首字母"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="form.typeCode" placeholder="选择类型" clearable style="width:100%">
|
||||
<el-option label="西医诊断" value="WEST" /><el-option label="中医诊断" value="TCM" />
|
||||
<el-select
|
||||
v-model="form.typeCode"
|
||||
placeholder="选择类型"
|
||||
clearable
|
||||
style="width:100%"
|
||||
>
|
||||
<el-option
|
||||
label="西医诊断"
|
||||
value="WEST"
|
||||
/><el-option
|
||||
label="中医诊断"
|
||||
value="TCM"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="formVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="formVisible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
:name="1"
|
||||
>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" :data="method_code"
|
||||
:row-config="{ isCurrent: true }"
|
||||
:data="method_code"
|
||||
border
|
||||
max-height="650"
|
||||
@cell-click="clickRow"
|
||||
|
||||
@@ -1,27 +1,85 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">合同管理</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">合同管理</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="code" title="编码" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="code"
|
||||
title="编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -1,27 +1,85 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">客户数据</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">客户数据</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="code" title="编码" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="code"
|
||||
title="编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -4,51 +4,183 @@
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="card-title">费用配置</span>
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">新增项目</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增项目
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-form :inline="true" :model="queryParams" label-width="80px">
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="关键字">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="项目名称/编码" clearable @keyup.enter="handleQuery" style="width: 200px" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="项目名称/编码"
|
||||
clearable
|
||||
style="width: 200px"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="resetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 320px)" v-loading="loading">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="conditionCode" title="编码" width="120" />
|
||||
<vxe-column field="name" title="项目名称" min-width="200" show-overflow="title" />
|
||||
<vxe-column field="typeCode" title="类型" width="100" />
|
||||
<vxe-column field="status" title="状态" width="80" align="center">
|
||||
<vxe-table
|
||||
v-loading="loading"
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 320px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="conditionCode"
|
||||
title="编码"
|
||||
width="120"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="项目名称"
|
||||
min-width="200"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="typeCode"
|
||||
title="类型"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'" size="small">{{ row.status === '0' ? '启用' : '停用' }}</el-tag>
|
||||
<el-tag
|
||||
:type="row.status === '0' ? 'success' : 'info'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.status === '0' ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="120" fixed="right">
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="120"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link icon="Edit" @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Edit"
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<pagination v-show="total > 0" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
<el-dialog v-model="formVisible" :title="formTitle" width="600px" append-to-body>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="项目编码" prop="conditionCode"><el-input v-model="form.conditionCode" placeholder="项目编码" /></el-form-item>
|
||||
<el-form-item label="项目名称" prop="name"><el-input v-model="form.name" placeholder="项目名称" /></el-form-item>
|
||||
<el-dialog
|
||||
v-model="formVisible"
|
||||
:title="formTitle"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item
|
||||
label="项目编码"
|
||||
prop="conditionCode"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.conditionCode"
|
||||
placeholder="项目编码"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="项目名称"
|
||||
prop="name"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="项目名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="form.typeCode" placeholder="选择类型" clearable style="width:100%">
|
||||
<el-option label="诊疗费" value="TREAT" /><el-option label="药品费" value="DRUG" />
|
||||
<el-option label="检查费" value="EXAM" /><el-option label="检验费" value="LAB" />
|
||||
<el-option label="处置费" value="DISPOSAL" /><el-option label="材料费" value="MATERIAL" />
|
||||
<el-select
|
||||
v-model="form.typeCode"
|
||||
placeholder="选择类型"
|
||||
clearable
|
||||
style="width:100%"
|
||||
>
|
||||
<el-option
|
||||
label="诊疗费"
|
||||
value="TREAT"
|
||||
/><el-option
|
||||
label="药品费"
|
||||
value="DRUG"
|
||||
/>
|
||||
<el-option
|
||||
label="检查费"
|
||||
value="EXAM"
|
||||
/><el-option
|
||||
label="检验费"
|
||||
value="LAB"
|
||||
/>
|
||||
<el-option
|
||||
label="处置费"
|
||||
value="DISPOSAL"
|
||||
/><el-option
|
||||
label="材料费"
|
||||
value="MATERIAL"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="formVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="formVisible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -1,27 +1,85 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">LIS合管配置</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">LIS合管配置</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="code" title="编码" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="code"
|
||||
title="编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -1,28 +1,89 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">货位管理</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">货位管理</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="货位名称/编码" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="货位名称/编码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="locationCode" title="货位编码" />
|
||||
<vxe-column field="locationName" title="货位名称" />
|
||||
<vxe-column field="warehouseName" title="所属库房" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'danger'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="locationCode"
|
||||
title="货位编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="locationName"
|
||||
title="货位名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="warehouseName"
|
||||
title="所属库房"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'danger'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -91,7 +91,7 @@ import {debounce} from 'lodash-es';
|
||||
const props = defineProps({
|
||||
adviceQueryParams: {
|
||||
type: Object,
|
||||
default: '',
|
||||
default: () => ({}),
|
||||
},
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
|
||||
@@ -79,7 +79,7 @@ import {throttle} from 'lodash-es';
|
||||
const props = defineProps({
|
||||
adviceQueryParams: {
|
||||
type: Object,
|
||||
default: '',
|
||||
default: () => ({}),
|
||||
},
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" v-loading="templateLoading"
|
||||
v-loading="templateLoading"
|
||||
:row-config="{ isCurrent: true }"
|
||||
:data="orderGroupList"
|
||||
style="width: 100%"
|
||||
border
|
||||
|
||||
@@ -4,47 +4,159 @@
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="card-title">中医处方</span>
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">新增处方</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增处方
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-form :inline="true" :model="queryParams" label-width="80px">
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
label-width="80px"
|
||||
>
|
||||
<el-form-item label="关键字">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="处方名称/编码" clearable @keyup.enter="handleQuery" style="width: 200px" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="处方名称/编码"
|
||||
clearable
|
||||
style="width: 200px"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="resetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 320px)" v-loading="loading">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="conditionCode" title="编码" width="120" />
|
||||
<vxe-column field="name" title="处方名称" min-width="200" show-overflow="title" />
|
||||
<vxe-column field="typeCode" title="类型" width="100" />
|
||||
<vxe-column field="status" title="状态" width="80" align="center">
|
||||
<vxe-table
|
||||
v-loading="loading"
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 320px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="conditionCode"
|
||||
title="编码"
|
||||
width="120"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="处方名称"
|
||||
min-width="200"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="typeCode"
|
||||
title="类型"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
width="80"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'" size="small">{{ row.status === '0' ? '启用' : '停用' }}</el-tag>
|
||||
<el-tag
|
||||
:type="row.status === '0' ? 'success' : 'info'"
|
||||
size="small"
|
||||
>
|
||||
{{ row.status === '0' ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="120" fixed="right">
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="120"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link icon="Edit" @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Edit"
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<pagination v-show="total > 0" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
<el-dialog v-model="formVisible" :title="formTitle" width="600px" append-to-body>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="处方编码" prop="conditionCode"><el-input v-model="form.conditionCode" placeholder="处方编码" /></el-form-item>
|
||||
<el-form-item label="处方名称" prop="name"><el-input v-model="form.name" placeholder="处方名称" /></el-form-item>
|
||||
<el-dialog
|
||||
v-model="formVisible"
|
||||
:title="formTitle"
|
||||
width="600px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item
|
||||
label="处方编码"
|
||||
prop="conditionCode"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.conditionCode"
|
||||
placeholder="处方编码"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="处方名称"
|
||||
prop="name"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="处方名称"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="证型">
|
||||
<el-input v-model="form.typeCode" placeholder="中医证型" />
|
||||
<el-input
|
||||
v-model="form.typeCode"
|
||||
placeholder="中医证型"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="formVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="formVisible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
@click="getWardList()"
|
||||
/>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" ref="wardRef"
|
||||
ref="wardRef"
|
||||
:row-config="{ isCurrent: true }"
|
||||
max-height="630"
|
||||
:data="wardList"
|
||||
@cell-click="(row) => clickRow(row, 10, 0)"
|
||||
|
||||
@@ -3,18 +3,45 @@
|
||||
<div style="margin-bottom:16px;display:flex;justify-content:space-between;align-items:center">
|
||||
<span style="font-size:18px;font-weight:bold">经营分析</span>
|
||||
<div>
|
||||
<el-button type="primary" @click="loadData">刷新</el-button>
|
||||
<el-button type="warning" @click="exportReport">导出报告</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="loadData"
|
||||
>
|
||||
刷新
|
||||
</el-button>
|
||||
<el-button
|
||||
type="warning"
|
||||
@click="exportReport"
|
||||
>
|
||||
导出报告
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 统计卡片 -->
|
||||
<el-row :gutter="16" style="margin-bottom:16px">
|
||||
<el-col :span="4" v-for="item in statCards" :key="item.label">
|
||||
<el-card shadow="hover" :body-style="{padding:'10px'}">
|
||||
<el-row
|
||||
:gutter="16"
|
||||
style="margin-bottom:16px"
|
||||
>
|
||||
<el-col
|
||||
v-for="item in statCards"
|
||||
:key="item.label"
|
||||
:span="4"
|
||||
>
|
||||
<el-card
|
||||
shadow="hover"
|
||||
:body-style="{padding:'10px'}"
|
||||
>
|
||||
<div style="text-align:center">
|
||||
<div style="font-size:20px;font-weight:bold" :style="{color:item.color}">{{ item.value }}</div>
|
||||
<div style="font-size:12px;color:#999">{{ item.label }}</div>
|
||||
<div
|
||||
style="font-size:20px;font-weight:bold"
|
||||
:style="{color:item.color}"
|
||||
>
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<div style="font-size:12px;color:#999">
|
||||
{{ item.label }}
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
@@ -22,46 +49,122 @@
|
||||
|
||||
<!-- 筛选 -->
|
||||
<div style="margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap">
|
||||
<el-select v-model="q.departmentName" placeholder="科室" clearable style="width:140px">
|
||||
<el-option v-for="dept in departments" :key="dept" :label="dept" :value="dept"/>
|
||||
<el-select
|
||||
v-model="q.departmentName"
|
||||
placeholder="科室"
|
||||
clearable
|
||||
style="width:140px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dept in departments"
|
||||
:key="dept"
|
||||
:label="dept"
|
||||
:value="dept"
|
||||
/>
|
||||
</el-select>
|
||||
<el-date-picker v-model="q.dateRange" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" style="width:240px"/>
|
||||
<el-button type="primary" @click="loadData">查询</el-button>
|
||||
<el-button @click="resetQuery">重置</el-button>
|
||||
<el-date-picker
|
||||
v-model="q.dateRange"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
style="width:240px"
|
||||
/>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="loadData"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button @click="resetQuery">
|
||||
重置
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<el-table :data="analyticsData" border stripe v-loading="loading">
|
||||
<el-table-column prop="statDate" label="日期" width="120"/>
|
||||
<el-table-column prop="departmentName" label="科室" width="120"/>
|
||||
<el-table-column prop="revenue" label="收入(万元)" width="110" align="right">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="analyticsData"
|
||||
border
|
||||
stripe
|
||||
>
|
||||
<el-table-column
|
||||
prop="statDate"
|
||||
label="日期"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="departmentName"
|
||||
label="科室"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="revenue"
|
||||
label="收入(万元)"
|
||||
width="110"
|
||||
align="right"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span style="color:#67C23A;font-weight:bold">{{ formatMoney(row.revenue) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="cost" label="成本(万元)" width="110" align="right">
|
||||
<el-table-column
|
||||
prop="cost"
|
||||
label="成本(万元)"
|
||||
width="110"
|
||||
align="right"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span style="color:#F56C6C">{{ formatMoney(row.cost) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="profit" label="利润(万元)" width="110" align="right">
|
||||
<el-table-column
|
||||
prop="profit"
|
||||
label="利润(万元)"
|
||||
width="110"
|
||||
align="right"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span :style="{color: row.profit >= 0 ? '#67C23A' : '#F56C6C', fontWeight:'bold'}">
|
||||
{{ formatMoney(row.profit) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="patientCount" label="患者数" width="80" align="center"/>
|
||||
<el-table-column prop="bedOccupancyRate" label="床位率" width="90" align="center">
|
||||
<el-table-column
|
||||
prop="patientCount"
|
||||
label="患者数"
|
||||
width="80"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="bedOccupancyRate"
|
||||
label="床位率"
|
||||
width="90"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span :style="{color: row.bedOccupancyRate > 90 ? '#67C23A' : row.bedOccupancyRate > 70 ? '#E6A23C' : '#F56C6C', fontWeight:'bold'}">
|
||||
{{ row.bedOccupancyRate }}%
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="avgStayDays" label="平均住院日" width="100" align="center"/>
|
||||
<el-table-column prop="bedTurnover" label="床位周转" width="80" align="center"/>
|
||||
<el-table-column prop="profitRate" label="利润率" width="90" align="center">
|
||||
<el-table-column
|
||||
prop="avgStayDays"
|
||||
label="平均住院日"
|
||||
width="100"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="bedTurnover"
|
||||
label="床位周转"
|
||||
width="80"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="profitRate"
|
||||
label="利润率"
|
||||
width="90"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{row}">
|
||||
<span :style="{color: row.profitRate > 20 ? '#67C23A' : '#E6A23C', fontWeight:'bold'}">
|
||||
{{ row.profitRate || 0 }}%
|
||||
@@ -70,7 +173,15 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-pagination style="margin-top:12px;justify-content:flex-end" v-model:current-page="q.pageNo" v-model:page-size="q.pageSize" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="loadData" @current-change="loadData"/>
|
||||
<el-pagination
|
||||
v-model:current-page="q.pageNo"
|
||||
v-model:page-size="q.pageSize"
|
||||
style="margin-top:12px;justify-content:flex-end"
|
||||
:total="total"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@size-change="loadData"
|
||||
@current-change="loadData"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,22 +1,61 @@
|
||||
<template>
|
||||
<el-dialog title="电子签名" v-model="visible" width="500px" :close-on-click-modal="false">
|
||||
<el-form :model="formData" label-width="100px">
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
title="电子签名"
|
||||
width="500px"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form
|
||||
:model="formData"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item label="文档类型">
|
||||
<el-select v-model="formData.documentType" placeholder="选择文档类型">
|
||||
<el-option v-for="d in sign_document_type" :key="d.value" :label="d.label" :value="d.value" />
|
||||
|
||||
|
||||
<el-select
|
||||
v-model="formData.documentType"
|
||||
placeholder="选择文档类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="d in sign_document_type"
|
||||
:key="d.value"
|
||||
:label="d.label"
|
||||
:value="d.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="文档ID"><el-input v-model="formData.documentId" placeholder="文档ID" /></el-form-item>
|
||||
<el-form-item label="签名人员"><el-input v-model="formData.signerName" /></el-form-item>
|
||||
<el-form-item label="职称"><el-input v-model="formData.signerTitle" /></el-form-item>
|
||||
<el-form-item label="科室"><el-input v-model="formData.signerDepartment" /></el-form-item>
|
||||
<el-form-item label="签名密码"><el-input v-model="formData.signatureData" type="password" placeholder="输入签名密码" show-password /></el-form-item>
|
||||
<el-form-item label="文档ID">
|
||||
<el-input
|
||||
v-model="formData.documentId"
|
||||
placeholder="文档ID"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="签名人员">
|
||||
<el-input v-model="formData.signerName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="职称">
|
||||
<el-input v-model="formData.signerTitle" />
|
||||
</el-form-item>
|
||||
<el-form-item label="科室">
|
||||
<el-input v-model="formData.signerDepartment" />
|
||||
</el-form-item>
|
||||
<el-form-item label="签名密码">
|
||||
<el-input
|
||||
v-model="formData.signatureData"
|
||||
type="password"
|
||||
placeholder="输入签名密码"
|
||||
show-password
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleSign">签名</el-button>
|
||||
<el-button @click="visible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleSign"
|
||||
>
|
||||
签名
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
@@ -1,43 +1,144 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" :inline="true" v-show="showSearch">
|
||||
<el-form-item label="文档类型" prop="documentType">
|
||||
<el-select v-model="queryParams.documentType" placeholder="全部" clearable>
|
||||
<el-option label="电子病历" value="EMR" /><el-option label="处方" value="PRESCRIPTION" />
|
||||
<el-option label="医嘱" value="ORDER" /><el-option label="会诊" value="CONSULTATION" />
|
||||
<el-form
|
||||
v-show="showSearch"
|
||||
:model="queryParams"
|
||||
:inline="true"
|
||||
>
|
||||
<el-form-item
|
||||
label="文档类型"
|
||||
prop="documentType"
|
||||
>
|
||||
<el-select
|
||||
v-model="queryParams.documentType"
|
||||
placeholder="全部"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
label="电子病历"
|
||||
value="EMR"
|
||||
/><el-option
|
||||
label="处方"
|
||||
value="PRESCRIPTION"
|
||||
/>
|
||||
<el-option
|
||||
label="医嘱"
|
||||
value="ORDER"
|
||||
/><el-option
|
||||
label="会诊"
|
||||
value="CONSULTATION"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="文档ID" prop="documentId">
|
||||
<el-input v-model="queryParams.documentId" placeholder="文档ID" clearable />
|
||||
<el-form-item
|
||||
label="文档ID"
|
||||
prop="documentId"
|
||||
>
|
||||
<el-input
|
||||
v-model="queryParams.documentId"
|
||||
placeholder="文档ID"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="resetQuery"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="loading" :data="dataList">
|
||||
<el-table-column label="文档类型" prop="documentType" width="100">
|
||||
<template #default="scope"><el-tag>{{ docTypeMap[scope.row.documentType] }}</el-tag></template>
|
||||
</el-table-column>
|
||||
<el-table-column label="文档ID" prop="documentId" width="100" />
|
||||
<el-table-column label="签名人员" prop="signerName" width="120" />
|
||||
<el-table-column label="职称" prop="signerTitle" width="100" />
|
||||
<el-table-column label="科室" prop="signerDepartment" width="120" />
|
||||
<el-table-column label="签名时间" prop="signTime" width="180" />
|
||||
<el-table-column label="状态" prop="status" width="100">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
>
|
||||
<el-table-column
|
||||
label="文档类型"
|
||||
prop="documentType"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.status === 'VALID' ? 'success' : 'danger'">{{ scope.row.status === 'VALID' ? '有效' : '已撤销' }}</el-tag>
|
||||
<el-tag>{{ docTypeMap[scope.row.documentType] }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="120" align="center">
|
||||
<el-table-column
|
||||
label="文档ID"
|
||||
prop="documentId"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="签名人员"
|
||||
prop="signerName"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="职称"
|
||||
prop="signerTitle"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="科室"
|
||||
prop="signerDepartment"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="签名时间"
|
||||
prop="signTime"
|
||||
width="180"
|
||||
/>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
prop="status"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleVerify(scope.row)">验证</el-button>
|
||||
<el-tag :type="scope.row.status === 'VALID' ? 'success' : 'danger'">
|
||||
{{ scope.row.status === 'VALID' ? '有效' : '已撤销' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleVerify(scope.row)"
|
||||
>
|
||||
验证
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
<el-dialog title="签名验证结果" v-model="verifyVisible" width="400px">
|
||||
<el-result v-if="verifyResult" :icon="verifyResult.valid ? 'success' : 'error'" :title="verifyResult.valid ? '签名有效' : '签名无效'" :sub-title="verifyResult.message" />
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<el-dialog
|
||||
v-model="verifyVisible"
|
||||
title="签名验证结果"
|
||||
width="400px"
|
||||
>
|
||||
<el-result
|
||||
v-if="verifyResult"
|
||||
:icon="verifyResult.valid ? 'success' : 'error'"
|
||||
:title="verifyResult.valid ? '签名有效' : '签名无效'"
|
||||
:sub-title="verifyResult.message"
|
||||
/>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,18 +1,62 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-row :gutter="20" class="mb8">
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="总签名数" :value="stats.totalSignatures || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="有效签名" :value="stats.validSignatures || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="已撤销" :value="stats.revokedSignatures || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="今日签名" :value="stats.todaySignatures || 0" /></el-card></el-col>
|
||||
<el-row
|
||||
:gutter="20"
|
||||
class="mb8"
|
||||
>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="总签名数"
|
||||
:value="stats.totalSignatures || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="有效签名"
|
||||
:value="stats.validSignatures || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="已撤销"
|
||||
:value="stats.revokedSignatures || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="今日签名"
|
||||
:value="stats.todaySignatures || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-card>
|
||||
<template #header><span>签名统计</span></template>
|
||||
<template #header>
|
||||
<span>签名统计</span>
|
||||
</template>
|
||||
<el-table :data="stats.departmentStats || []">
|
||||
<el-table-column label="科室" prop="department" />
|
||||
<el-table-column label="签名数" prop="count" />
|
||||
<el-table-column label="有效率" prop="validRate">
|
||||
<template #default="s"><el-progress :percentage="s.row.validRate || 0" /></template>
|
||||
<el-table-column
|
||||
label="科室"
|
||||
prop="department"
|
||||
/>
|
||||
<el-table-column
|
||||
label="签名数"
|
||||
prop="count"
|
||||
/>
|
||||
<el-table-column
|
||||
label="有效率"
|
||||
prop="validRate"
|
||||
>
|
||||
<template #default="s">
|
||||
<el-progress :percentage="s.row.validRate || 0" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
</el-input>
|
||||
</div>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" v-loading="listLoading"
|
||||
v-loading="listLoading"
|
||||
:row-config="{ isCurrent: true }"
|
||||
border
|
||||
:data="list"
|
||||
max-height="450"
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
</el-input>
|
||||
</div>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" v-loading="listLoading"
|
||||
v-loading="listLoading"
|
||||
:row-config="{ isCurrent: true }"
|
||||
border
|
||||
:data="list"
|
||||
max-height="450"
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
</el-input>
|
||||
</div>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" v-loading="listLoading"
|
||||
v-loading="listLoading"
|
||||
:row-config="{ isCurrent: true }"
|
||||
border
|
||||
:data="list"
|
||||
max-height="450"
|
||||
|
||||
@@ -1,30 +1,97 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">服务目录</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">服务目录</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="服务名称/编码" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="服务名称/编码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="itemCode" title="服务编码" />
|
||||
<vxe-column field="itemName" title="服务名称" />
|
||||
<vxe-column field="itemSpec" title="规格" />
|
||||
<vxe-column field="unit" title="单位" />
|
||||
<vxe-column field="price" title="价格" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'danger'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemCode"
|
||||
title="服务编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemName"
|
||||
title="服务名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemSpec"
|
||||
title="规格"
|
||||
/>
|
||||
<vxe-column
|
||||
field="unit"
|
||||
title="单位"
|
||||
/>
|
||||
<vxe-column
|
||||
field="price"
|
||||
title="价格"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'danger'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -319,9 +319,9 @@
|
||||
:payment-id="paymentId"
|
||||
:details="details"
|
||||
:charged-items="chargedItems"
|
||||
@close="handleClose"
|
||||
:fee-type="patientInfo.medfeePaymtdCode"
|
||||
:medfee_paymtd_code="medfee_paymtd_code"
|
||||
@close="handleClose"
|
||||
@refresh="getPatientList"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -191,11 +191,11 @@ const props = defineProps({
|
||||
},
|
||||
chargeItemIds: {
|
||||
type: Array,
|
||||
default: [],
|
||||
default: () => [],
|
||||
},
|
||||
medicineReturnList: {
|
||||
type: Array,
|
||||
default: [],
|
||||
default: () => [],
|
||||
},
|
||||
details: {
|
||||
type: Object,
|
||||
|
||||
@@ -196,11 +196,11 @@ const props = defineProps({
|
||||
},
|
||||
chargeItemIds: {
|
||||
type: Array,
|
||||
default: [],
|
||||
default: () => [],
|
||||
},
|
||||
chrgBchnoList: {
|
||||
type: Array,
|
||||
default: [],
|
||||
default: () => [],
|
||||
},
|
||||
chrgBchno: {
|
||||
type: String,
|
||||
|
||||
@@ -225,7 +225,7 @@ const props = defineProps({
|
||||
},
|
||||
chargeItemIds: {
|
||||
type: Array,
|
||||
default: [],
|
||||
default: () => [],
|
||||
},
|
||||
eventType: {
|
||||
type: String,
|
||||
|
||||
@@ -186,7 +186,8 @@
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" :data="recordList"
|
||||
:row-config="{ isCurrent: true }"
|
||||
:data="recordList"
|
||||
style="width: 100%"
|
||||
max-height="400"
|
||||
@current-change="handleRecordSelect"
|
||||
|
||||
@@ -632,7 +632,8 @@
|
||||
@change="handleQuery"
|
||||
/>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" v-loading="loading"
|
||||
v-loading="loading"
|
||||
:row-config="{ isCurrent: true }"
|
||||
:data="outpatientRegistrationList"
|
||||
:max-height="Math.max(470, Math.min(outpatientRegistrationList.length, 10) * 42 + 50)"
|
||||
:scroll-x="{ enabled: true }"
|
||||
@@ -826,9 +827,11 @@
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
key="operation" title="操作"
|
||||
key="operation"
|
||||
title="操作"
|
||||
align="center"
|
||||
field="" width="150"
|
||||
field=""
|
||||
width="150"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="scope">
|
||||
|
||||
@@ -190,7 +190,8 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<vxe-table :row-config="{ isCurrent: true }"
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }"
|
||||
:data="patientList"
|
||||
style="width: 100%"
|
||||
:row-key="row => row.identifierNo || row.patientId || row.cardNo"
|
||||
|
||||
@@ -1,25 +1,71 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">挂号收费记录</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">挂号收费记录</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="date" title="日期" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="120">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="date"
|
||||
title="日期"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleDetail(row)">详情</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="120"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleDetail(row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -1,25 +1,71 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">排班管理</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">排班管理</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="date" title="日期" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="120">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="date"
|
||||
title="日期"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleDetail(row)">详情</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="120"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleDetail(row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
:payment-id="paymentId"
|
||||
:details="details"
|
||||
:charged-items="chargedItems"
|
||||
@close="handleClose"
|
||||
:fee-type="patientInfo.medfeePaymtdCode"
|
||||
:medfee_paymtd_code="medfee_paymtd_code"
|
||||
@close="handleClose"
|
||||
@refresh="getChargeList"
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -1,60 +1,215 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-row :gutter="20" class="mb8">
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="路径总数" :value="stats.totalPathways || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="入径数" :value="stats.enteredCount || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="完成数" :value="stats.completedCount || 0" /></el-card></el-col>
|
||||
<el-col :span="6"><el-card shadow="hover"><el-statistic title="变异数" :value="stats.variedCount || 0" /></el-card></el-col>
|
||||
<el-row
|
||||
:gutter="20"
|
||||
class="mb8"
|
||||
>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="路径总数"
|
||||
:value="stats.totalPathways || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="入径数"
|
||||
:value="stats.enteredCount || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="完成数"
|
||||
:value="stats.completedCount || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card shadow="hover">
|
||||
<el-statistic
|
||||
title="变异数"
|
||||
:value="stats.variedCount || 0"
|
||||
/>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-card>
|
||||
<template #header>
|
||||
<div style="display:flex;justify-content:space-between;align-items:center">
|
||||
<span>临床路径管理</span>
|
||||
<el-button type="primary" icon="Plus" @click="handleAdd">新增路径</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增路径
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-form :model="queryParams" :inline="true" class="mb8">
|
||||
<el-form-item label="疾病编码"><el-input v-model="queryParams.diseaseCode" placeholder="疾病编码" clearable /></el-form-item>
|
||||
<el-form
|
||||
:model="queryParams"
|
||||
:inline="true"
|
||||
class="mb8"
|
||||
>
|
||||
<el-form-item label="疾病编码">
|
||||
<el-input
|
||||
v-model="queryParams.diseaseCode"
|
||||
placeholder="疾病编码"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button @click="queryParams.diseaseCode='';handleQuery()">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button @click="queryParams.diseaseCode='';handleQuery()">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-loading="loading" :data="dataList">
|
||||
<el-table-column label="疾病编码" prop="diseaseCode" width="120" />
|
||||
<el-table-column label="疾病名称" prop="diseaseName" width="150" />
|
||||
<el-table-column label="路径名称" prop="pathwayName" width="200" show-overflow-tooltip />
|
||||
<el-table-column label="标准住院日" prop="standardLos" width="100" align="center" />
|
||||
<el-table-column label="版本" prop="version" width="70" align="center" />
|
||||
<el-table-column label="状态" prop="status" width="90">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="dataList"
|
||||
>
|
||||
<el-table-column
|
||||
label="疾病编码"
|
||||
prop="diseaseCode"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
label="疾病名称"
|
||||
prop="diseaseName"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
label="路径名称"
|
||||
prop="pathwayName"
|
||||
width="200"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="标准住院日"
|
||||
prop="standardLos"
|
||||
width="100"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="版本"
|
||||
prop="version"
|
||||
width="70"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
label="状态"
|
||||
prop="status"
|
||||
width="90"
|
||||
>
|
||||
<template #default="s">
|
||||
<el-tag :type="s.row.status==='ACTIVE'?'success':'info'">{{ s.row.status === 'ACTIVE' ? '启用' : '停用' }}</el-tag>
|
||||
<el-tag :type="s.row.status==='ACTIVE'?'success':'info'">
|
||||
{{ s.row.status === 'ACTIVE' ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200" fixed="right">
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="200"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="s">
|
||||
<el-button link type="primary" @click="handleEnter(s.row)">入径</el-button>
|
||||
<el-button link type="success" @click="handleComplete(s.row)">完成</el-button>
|
||||
<el-button link type="warning" @click="handleVary(s.row)">变异</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleEnter(s.row)"
|
||||
>
|
||||
入径
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="success"
|
||||
@click="handleComplete(s.row)"
|
||||
>
|
||||
完成
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="warning"
|
||||
@click="handleVary(s.row)"
|
||||
>
|
||||
变异
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
|
||||
<el-dialog title="新增临床路径" v-model="dialogVisible" width="600px">
|
||||
<el-form :model="formData" label-width="110px">
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
title="新增临床路径"
|
||||
width="600px"
|
||||
>
|
||||
<el-form
|
||||
:model="formData"
|
||||
label-width="110px"
|
||||
>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12"><el-form-item label="疾病编码"><el-input v-model="formData.diseaseCode" /></el-form-item></el-col>
|
||||
<el-col :span="12"><el-form-item label="疾病名称"><el-input v-model="formData.diseaseName" /></el-form-item></el-col>
|
||||
<el-col :span="24"><el-form-item label="路径名称"><el-input v-model="formData.pathwayName" /></el-form-item></el-col>
|
||||
<el-col :span="12"><el-form-item label="标准住院日"><el-input-number v-model="formData.standardLos" :min="1" /></el-form-item></el-col>
|
||||
<el-col :span="24"><el-form-item label="路径内容"><el-input v-model="formData.pathwayContent" type="textarea" :rows="4" /></el-form-item></el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="疾病编码">
|
||||
<el-input v-model="formData.diseaseCode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="疾病名称">
|
||||
<el-input v-model="formData.diseaseName" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="路径名称">
|
||||
<el-input v-model="formData.pathwayName" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="标准住院日">
|
||||
<el-input-number
|
||||
v-model="formData.standardLos"
|
||||
:min="1"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="路径内容">
|
||||
<el-input
|
||||
v-model="formData.pathwayContent"
|
||||
type="textarea"
|
||||
:rows="4"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确定</el-button>
|
||||
<el-button @click="dialogVisible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
>
|
||||
确定
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -79,7 +79,7 @@ import {throttle} from 'lodash-es';
|
||||
const props = defineProps({
|
||||
adviceQueryParams: {
|
||||
type: Object,
|
||||
default: '',
|
||||
default: () => ({}),
|
||||
},
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
|
||||
@@ -34,13 +34,34 @@
|
||||
clearable
|
||||
style="width: 130px"
|
||||
>
|
||||
<el-option label="挂号费" value="REG" />
|
||||
<el-option label="诊疗费" value="TREAT" />
|
||||
<el-option label="药品费" value="DRUG" />
|
||||
<el-option label="检查费" value="EXAM" />
|
||||
<el-option label="检验费" value="LAB" />
|
||||
<el-option label="处置费" value="DISPOSAL" />
|
||||
<el-option label="全部" value="" />
|
||||
<el-option
|
||||
label="挂号费"
|
||||
value="REG"
|
||||
/>
|
||||
<el-option
|
||||
label="诊疗费"
|
||||
value="TREAT"
|
||||
/>
|
||||
<el-option
|
||||
label="药品费"
|
||||
value="DRUG"
|
||||
/>
|
||||
<el-option
|
||||
label="检查费"
|
||||
value="EXAM"
|
||||
/>
|
||||
<el-option
|
||||
label="检验费"
|
||||
value="LAB"
|
||||
/>
|
||||
<el-option
|
||||
label="处置费"
|
||||
value="DISPOSAL"
|
||||
/>
|
||||
<el-option
|
||||
label="全部"
|
||||
value=""
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="收费状态">
|
||||
@@ -50,41 +71,81 @@
|
||||
clearable
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option label="已收费" value="1" />
|
||||
<el-option label="已退费" value="2" />
|
||||
<el-option label="待收费" value="0" />
|
||||
<el-option
|
||||
label="已收费"
|
||||
value="1"
|
||||
/>
|
||||
<el-option
|
||||
label="已退费"
|
||||
value="2"
|
||||
/>
|
||||
<el-option
|
||||
label="待收费"
|
||||
value="0"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">查询</el-button>
|
||||
<el-button icon="Refresh" @click="handleReset">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="handleReset"
|
||||
>
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 费用汇总 -->
|
||||
<el-row :gutter="16" class="summary-row" v-if="summaryData">
|
||||
<el-row
|
||||
v-if="summaryData"
|
||||
:gutter="16"
|
||||
class="summary-row"
|
||||
>
|
||||
<el-col :span="6">
|
||||
<div class="summary-card">
|
||||
<div class="summary-label">总收费金额</div>
|
||||
<div class="summary-value">{{ formatAmount(summaryData.totalAmount) }}</div>
|
||||
<div class="summary-label">
|
||||
总收费金额
|
||||
</div>
|
||||
<div class="summary-value">
|
||||
{{ formatAmount(summaryData.totalAmount) }}
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<div class="summary-card">
|
||||
<div class="summary-label">总退费金额</div>
|
||||
<div class="summary-value refund">{{ formatAmount(summaryData.refundAmount) }}</div>
|
||||
<div class="summary-label">
|
||||
总退费金额
|
||||
</div>
|
||||
<div class="summary-value refund">
|
||||
{{ formatAmount(summaryData.refundAmount) }}
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<div class="summary-card">
|
||||
<div class="summary-label">实收金额</div>
|
||||
<div class="summary-value success">{{ formatAmount(summaryData.actualAmount) }}</div>
|
||||
<div class="summary-label">
|
||||
实收金额
|
||||
</div>
|
||||
<div class="summary-value success">
|
||||
{{ formatAmount(summaryData.actualAmount) }}
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<div class="summary-card">
|
||||
<div class="summary-label">总笔数</div>
|
||||
<div class="summary-value">{{ summaryData.totalCount || 0 }}</div>
|
||||
<div class="summary-label">
|
||||
总笔数
|
||||
</div>
|
||||
<div class="summary-value">
|
||||
{{ summaryData.totalCount || 0 }}
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -98,40 +159,134 @@
|
||||
max-height="calc(100vh - 420px)"
|
||||
@cell-click="handleDetail"
|
||||
>
|
||||
<vxe-column field="billNo" title="账单号" align="center" width="180" show-overflow="title" />
|
||||
<vxe-column field="patientName" title="患者姓名" align="center" width="110" />
|
||||
<vxe-column field="genderEnum_enumText" title="性别" align="center" width="70" />
|
||||
<vxe-column field="age" title="年龄" align="center" width="60" />
|
||||
<vxe-column field="encounterNo" title="门诊号" align="center" width="140" show-overflow="title" />
|
||||
<vxe-column field="billType_dictText" title="收费类型" align="center" width="100" />
|
||||
<vxe-column field="totalAmount" title="收费金额" align="right" width="110">
|
||||
<vxe-column
|
||||
field="billNo"
|
||||
title="账单号"
|
||||
align="center"
|
||||
width="180"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="patientName"
|
||||
title="患者姓名"
|
||||
align="center"
|
||||
width="110"
|
||||
/>
|
||||
<vxe-column
|
||||
field="genderEnum_enumText"
|
||||
title="性别"
|
||||
align="center"
|
||||
width="70"
|
||||
/>
|
||||
<vxe-column
|
||||
field="age"
|
||||
title="年龄"
|
||||
align="center"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="encounterNo"
|
||||
title="门诊号"
|
||||
align="center"
|
||||
width="140"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="billType_dictText"
|
||||
title="收费类型"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="totalAmount"
|
||||
title="收费金额"
|
||||
align="right"
|
||||
width="110"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span class="amount">{{ scope.row.totalAmount ? '¥' + scope.row.totalAmount.toFixed(2) : '-' }}</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="refundAmount" title="退费金额" align="right" width="110">
|
||||
<vxe-column
|
||||
field="refundAmount"
|
||||
title="退费金额"
|
||||
align="right"
|
||||
width="110"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.refundAmount > 0" class="amount refund">{{ '¥' + scope.row.refundAmount.toFixed(2) }}</span>
|
||||
<span
|
||||
v-if="scope.row.refundAmount > 0"
|
||||
class="amount refund"
|
||||
>{{ '¥' + scope.row.refundAmount.toFixed(2) }}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="payStatus_dictText" title="收费状态" align="center" width="90">
|
||||
<vxe-column
|
||||
field="payStatus_dictText"
|
||||
title="收费状态"
|
||||
align="center"
|
||||
width="90"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.payStatus === '1'" type="success" size="small">已收费</el-tag>
|
||||
<el-tag v-else-if="scope.row.payStatus === '2'" type="danger" size="small">已退费</el-tag>
|
||||
<el-tag v-else type="info" size="small">待收费</el-tag>
|
||||
<el-tag
|
||||
v-if="scope.row.payStatus === '1'"
|
||||
type="success"
|
||||
size="small"
|
||||
>
|
||||
已收费
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else-if="scope.row.payStatus === '2'"
|
||||
type="danger"
|
||||
size="small"
|
||||
>
|
||||
已退费
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else
|
||||
type="info"
|
||||
size="small"
|
||||
>
|
||||
待收费
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="payMethod_dictText" title="支付方式" align="center" width="100" />
|
||||
<vxe-column field="operatorName" title="收费员" align="center" width="100" />
|
||||
<vxe-column title="收费时间" align="center" width="160">
|
||||
<vxe-column
|
||||
field="payMethod_dictText"
|
||||
title="支付方式"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="operatorName"
|
||||
title="收费员"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
title="收费时间"
|
||||
align="center"
|
||||
width="160"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.payTime ? formatDateStr(scope.row.payTime, 'YYYY-MM-DD HH:mm') : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" align="center" width="80" fixed="right">
|
||||
<vxe-column
|
||||
title="操作"
|
||||
align="center"
|
||||
width="80"
|
||||
fixed="right"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="View" @click.stop="handleDetail(scope.row)">查看</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="View"
|
||||
@click.stop="handleDetail(scope.row)"
|
||||
>
|
||||
查看
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
@@ -151,17 +306,48 @@
|
||||
width="900px"
|
||||
destroy-on-close
|
||||
>
|
||||
<div v-if="billDetail" class="detail-content">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="账单号">{{ billDetail.billNo || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="患者姓名">{{ billDetail.patientName || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别/年龄">{{ billDetail.genderEnum_enumText || '-' }}/{{ billDetail.age || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="门诊号">{{ billDetail.encounterNo || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="收费类型">{{ billDetail.billType_dictText || '-' }}</el-descriptions-item>
|
||||
<div
|
||||
v-if="billDetail"
|
||||
class="detail-content"
|
||||
>
|
||||
<el-descriptions
|
||||
:column="3"
|
||||
border
|
||||
>
|
||||
<el-descriptions-item label="账单号">
|
||||
{{ billDetail.billNo || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="患者姓名">
|
||||
{{ billDetail.patientName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别/年龄">
|
||||
{{ billDetail.genderEnum_enumText || '-' }}/{{ billDetail.age || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="门诊号">
|
||||
{{ billDetail.encounterNo || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收费类型">
|
||||
{{ billDetail.billType_dictText || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收费状态">
|
||||
<el-tag v-if="billDetail.payStatus === '1'" type="success">已收费</el-tag>
|
||||
<el-tag v-else-if="billDetail.payStatus === '2'" type="danger">已退费</el-tag>
|
||||
<el-tag v-else type="info">待收费</el-tag>
|
||||
<el-tag
|
||||
v-if="billDetail.payStatus === '1'"
|
||||
type="success"
|
||||
>
|
||||
已收费
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else-if="billDetail.payStatus === '2'"
|
||||
type="danger"
|
||||
>
|
||||
已退费
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else
|
||||
type="info"
|
||||
>
|
||||
待收费
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收费金额">
|
||||
<span class="amount">¥{{ billDetail.totalAmount ? billDetail.totalAmount.toFixed(2) : '0.00' }}</span>
|
||||
@@ -171,38 +357,97 @@
|
||||
{{ billDetail.refundAmount > 0 ? '¥' + billDetail.refundAmount.toFixed(2) : '-' }}
|
||||
</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">{{ billDetail.payMethod_dictText || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="收费员">{{ billDetail.operatorName || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">
|
||||
{{ billDetail.payMethod_dictText || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收费员">
|
||||
{{ billDetail.operatorName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收费时间">
|
||||
{{ billDetail.payTime ? formatDateStr(billDetail.payTime, 'YYYY-MM-DD HH:mm:ss') : '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="费用性质">{{ billDetail.contractName || '-' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="费用性质">
|
||||
{{ billDetail.contractName || '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<div class="item-list" v-if="billDetail.items && billDetail.items.length">
|
||||
<div class="item-title">费用明细</div>
|
||||
<vxe-table :data="billDetail.items" border size="small">
|
||||
<vxe-column type="index" title="序号" align="center" width="60" />
|
||||
<vxe-column field="itemName" title="项目名称" align="left" min-width="180" show-overflow="title" />
|
||||
<vxe-column field="itemType_dictText" title="类型" align="center" width="100" />
|
||||
<vxe-column field="specification" title="规格" align="center" width="120" show-overflow="title" />
|
||||
<vxe-column field="quantity" title="数量" align="center" width="80" />
|
||||
<vxe-column field="unitPrice" title="单价" align="right" width="100">
|
||||
<div
|
||||
v-if="billDetail.items && billDetail.items.length"
|
||||
class="item-list"
|
||||
>
|
||||
<div class="item-title">
|
||||
费用明细
|
||||
</div>
|
||||
<vxe-table
|
||||
:data="billDetail.items"
|
||||
border
|
||||
size="small"
|
||||
>
|
||||
<vxe-column
|
||||
type="index"
|
||||
title="序号"
|
||||
align="center"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemName"
|
||||
title="项目名称"
|
||||
align="left"
|
||||
min-width="180"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemType_dictText"
|
||||
title="类型"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="specification"
|
||||
title="规格"
|
||||
align="center"
|
||||
width="120"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="quantity"
|
||||
title="数量"
|
||||
align="center"
|
||||
width="80"
|
||||
/>
|
||||
<vxe-column
|
||||
field="unitPrice"
|
||||
title="单价"
|
||||
align="right"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.unitPrice ? scope.row.unitPrice.toFixed(2) : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="totalAmount" title="金额" align="right" width="100">
|
||||
<vxe-column
|
||||
field="totalAmount"
|
||||
title="金额"
|
||||
align="right"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.totalAmount ? scope.row.totalAmount.toFixed(2) : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="doctorName" title="开单医生" align="center" width="110" />
|
||||
<vxe-column
|
||||
field="doctorName"
|
||||
title="开单医生"
|
||||
align="center"
|
||||
width="110"
|
||||
/>
|
||||
</vxe-table>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="detailVisible = false">关闭</el-button>
|
||||
<el-button @click="detailVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -1,27 +1,85 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="never">
|
||||
<template #header><span class="card-title">门诊会诊收费</span></template>
|
||||
<el-form :inline="true" :model="queryParams">
|
||||
<template #header>
|
||||
<span class="card-title">门诊会诊收费</span>
|
||||
</template>
|
||||
<el-form
|
||||
:inline="true"
|
||||
:model="queryParams"
|
||||
>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索" clearable @keyup.enter="handleQuery" />
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button type="success" icon="Plus" @click="handleAdd">新增</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Search"
|
||||
@click="handleQuery"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新增
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vxe-table :data="tableData" border height="calc(100vh - 280px)">
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="name" title="名称" />
|
||||
<vxe-column field="code" title="编码" />
|
||||
<vxe-column field="status" title="状态">
|
||||
<template #default="{ row }"><el-tag :type="row.status === '0' ? 'success' : 'info'">{{ row.status === '0' ? '正常' : '停用' }}</el-tag></template>
|
||||
</vxe-column>
|
||||
<vxe-column title="操作" width="150">
|
||||
<vxe-table
|
||||
:data="tableData"
|
||||
border
|
||||
height="calc(100vh - 280px)"
|
||||
>
|
||||
<vxe-column
|
||||
type="seq"
|
||||
title="序号"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="name"
|
||||
title="名称"
|
||||
/>
|
||||
<vxe-column
|
||||
field="code"
|
||||
title="编码"
|
||||
/>
|
||||
<vxe-column
|
||||
field="status"
|
||||
title="状态"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleEdit(row)">编辑</el-button>
|
||||
<el-button type="danger" link @click="handleDelete(row)">删除</el-button>
|
||||
<el-tag :type="row.status === '0' ? 'success' : 'info'">
|
||||
{{ row.status === '0' ? '正常' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column
|
||||
title="操作"
|
||||
width="150"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
link
|
||||
@click="handleDelete(row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
@keyup.enter="getPatientList"
|
||||
>
|
||||
<template #append>
|
||||
<el-button icon="Search" @click="getPatientList" />
|
||||
<el-button
|
||||
icon="Search"
|
||||
@click="getPatientList"
|
||||
/>
|
||||
</template>
|
||||
</el-input>
|
||||
<el-select
|
||||
@@ -25,10 +28,22 @@
|
||||
style="width: 100%; margin-top: 10px"
|
||||
@change="getPatientList"
|
||||
>
|
||||
<el-option label="全部" value="" />
|
||||
<el-option label="未退费" value="0" />
|
||||
<el-option label="部分退费" value="1" />
|
||||
<el-option label="全额退费" value="2" />
|
||||
<el-option
|
||||
label="全部"
|
||||
value=""
|
||||
/>
|
||||
<el-option
|
||||
label="未退费"
|
||||
value="0"
|
||||
/>
|
||||
<el-option
|
||||
label="部分退费"
|
||||
value="1"
|
||||
/>
|
||||
<el-option
|
||||
label="全额退费"
|
||||
value="2"
|
||||
/>
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
@@ -47,20 +62,69 @@
|
||||
height="calc(100vh - 360px)"
|
||||
@cell-click="handlePatientClick"
|
||||
>
|
||||
<vxe-column field="patientName" title="姓名" align="center" width="110" show-overflow="title" />
|
||||
<vxe-column field="genderEnum_enumText" title="性别" align="center" width="60" />
|
||||
<vxe-column field="age" title="年龄" align="center" width="50" />
|
||||
<vxe-column field="encounterNo" title="门诊号" align="center" width="140" show-overflow="title" />
|
||||
<vxe-column title="就诊日期" align="center" width="110">
|
||||
<vxe-column
|
||||
field="patientName"
|
||||
title="姓名"
|
||||
align="center"
|
||||
width="110"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="genderEnum_enumText"
|
||||
title="性别"
|
||||
align="center"
|
||||
width="60"
|
||||
/>
|
||||
<vxe-column
|
||||
field="age"
|
||||
title="年龄"
|
||||
align="center"
|
||||
width="50"
|
||||
/>
|
||||
<vxe-column
|
||||
field="encounterNo"
|
||||
title="门诊号"
|
||||
align="center"
|
||||
width="140"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
title="就诊日期"
|
||||
align="center"
|
||||
width="110"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.receptionTime ? formatDateStr(scope.row.receptionTime, 'YYYY-MM-DD') : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="refundStatus" title="退费状态" align="center" width="90">
|
||||
<vxe-column
|
||||
field="refundStatus"
|
||||
title="退费状态"
|
||||
align="center"
|
||||
width="90"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.refundStatus === '0'" type="success" size="small">正常</el-tag>
|
||||
<el-tag v-else-if="scope.row.refundStatus === '1'" type="warning" size="small">部分退</el-tag>
|
||||
<el-tag v-else-if="scope.row.refundStatus === '2'" type="danger" size="small">全额退</el-tag>
|
||||
<el-tag
|
||||
v-if="scope.row.refundStatus === '0'"
|
||||
type="success"
|
||||
size="small"
|
||||
>
|
||||
正常
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else-if="scope.row.refundStatus === '1'"
|
||||
type="warning"
|
||||
size="small"
|
||||
>
|
||||
部分退
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else-if="scope.row.refundStatus === '2'"
|
||||
type="danger"
|
||||
size="small"
|
||||
>
|
||||
全额退
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
@@ -78,25 +142,45 @@
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>费用明细</span>
|
||||
<span v-if="currentPatient" class="patient-info">
|
||||
<span
|
||||
v-if="currentPatient"
|
||||
class="patient-info"
|
||||
>
|
||||
{{ currentPatient.patientName }} - {{ currentPatient.encounterNo }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="action-bar">
|
||||
<el-button type="primary" :disabled="!selectedItems.length" @click="handleVerifyRefund">
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="!selectedItems.length"
|
||||
@click="handleVerifyRefund"
|
||||
>
|
||||
退费验证
|
||||
</el-button>
|
||||
<el-button type="danger" :disabled="!selectedItems.length" @click="handleSubmitRefund">
|
||||
<el-button
|
||||
type="danger"
|
||||
:disabled="!selectedItems.length"
|
||||
@click="handleSubmitRefund"
|
||||
>
|
||||
确认退费
|
||||
</el-button>
|
||||
<el-button :disabled="!selectedItems.length" @click="handleClearSelection">
|
||||
<el-button
|
||||
:disabled="!selectedItems.length"
|
||||
@click="handleClearSelection"
|
||||
>
|
||||
清空选择
|
||||
</el-button>
|
||||
<el-button icon="Refresh" @click="handleRegenerateCharge">
|
||||
<el-button
|
||||
icon="Refresh"
|
||||
@click="handleRegenerateCharge"
|
||||
>
|
||||
重新生成收费
|
||||
</el-button>
|
||||
<span v-if="refundTotalAmount > 0" class="refund-total">
|
||||
<span
|
||||
v-if="refundTotalAmount > 0"
|
||||
class="refund-total"
|
||||
>
|
||||
退费合计:¥{{ refundTotalAmount.toFixed(2) }}
|
||||
</span>
|
||||
</div>
|
||||
@@ -108,32 +192,100 @@
|
||||
@checkbox-change="handleSelectionChange"
|
||||
@select="handleSelectionChange"
|
||||
>
|
||||
<vxe-column type="checkbox" width="55" align="center" />
|
||||
<vxe-column field="itemName" title="项目名称" align="center" show-overflow="title" min-width="180" />
|
||||
<vxe-column field="itemType_dictText" title="类型" align="center" width="100" />
|
||||
<vxe-column field="specification" title="规格" align="center" width="120" show-overflow="title" />
|
||||
<vxe-column field="quantity" title="数量" align="center" width="80" />
|
||||
<vxe-column field="unitPrice" title="单价" align="right" width="100">
|
||||
<vxe-column
|
||||
type="checkbox"
|
||||
width="55"
|
||||
align="center"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemName"
|
||||
title="项目名称"
|
||||
align="center"
|
||||
show-overflow="title"
|
||||
min-width="180"
|
||||
/>
|
||||
<vxe-column
|
||||
field="itemType_dictText"
|
||||
title="类型"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<vxe-column
|
||||
field="specification"
|
||||
title="规格"
|
||||
align="center"
|
||||
width="120"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
field="quantity"
|
||||
title="数量"
|
||||
align="center"
|
||||
width="80"
|
||||
/>
|
||||
<vxe-column
|
||||
field="unitPrice"
|
||||
title="单价"
|
||||
align="right"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.unitPrice ? scope.row.unitPrice.toFixed(2) : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="totalAmount" title="金额" align="right" width="100">
|
||||
<vxe-column
|
||||
field="totalAmount"
|
||||
title="金额"
|
||||
align="right"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.totalAmount ? scope.row.totalAmount.toFixed(2) : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="paidAmount" title="已付金额" align="right" width="100">
|
||||
<vxe-column
|
||||
field="paidAmount"
|
||||
title="已付金额"
|
||||
align="right"
|
||||
width="100"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.paidAmount ? scope.row.paidAmount.toFixed(2) : '-' }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="doctorName" title="开单医生" align="center" width="110" />
|
||||
<vxe-column field="deptName" title="科室" align="center" width="130" show-overflow="title" />
|
||||
<vxe-column title="退费状态" align="center" width="90">
|
||||
<vxe-column
|
||||
field="doctorName"
|
||||
title="开单医生"
|
||||
align="center"
|
||||
width="110"
|
||||
/>
|
||||
<vxe-column
|
||||
field="deptName"
|
||||
title="科室"
|
||||
align="center"
|
||||
width="130"
|
||||
show-overflow="title"
|
||||
/>
|
||||
<vxe-column
|
||||
title="退费状态"
|
||||
align="center"
|
||||
width="90"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.refundStatus === '0'" type="success" size="small">正常</el-tag>
|
||||
<el-tag v-else-if="scope.row.refundStatus === '1'" type="warning" size="small">已退费</el-tag>
|
||||
<el-tag
|
||||
v-if="scope.row.refundStatus === '0'"
|
||||
type="success"
|
||||
size="small"
|
||||
>
|
||||
正常
|
||||
</el-tag>
|
||||
<el-tag
|
||||
v-else-if="scope.row.refundStatus === '1'"
|
||||
type="warning"
|
||||
size="small"
|
||||
>
|
||||
已退费
|
||||
</el-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
@@ -146,7 +298,10 @@
|
||||
width="700px"
|
||||
destroy-on-close
|
||||
>
|
||||
<div v-if="verifyResult" class="verify-content">
|
||||
<div
|
||||
v-if="verifyResult"
|
||||
class="verify-content"
|
||||
>
|
||||
<el-alert
|
||||
:type="verifyResult.success ? 'success' : 'error'"
|
||||
:title="verifyResult.success ? '验证通过' : '验证未通过'"
|
||||
@@ -155,16 +310,35 @@
|
||||
:closable="false"
|
||||
style="margin-bottom: 16px"
|
||||
/>
|
||||
<el-descriptions v-if="verifyResult.details" :column="2" border size="small">
|
||||
<el-descriptions-item label="可退数量">{{ verifyResult.details.refundableCount || 0 }}</el-descriptions-item>
|
||||
<el-descriptions-item label="可退金额">{{ verifyResult.details.refundableAmount || '¥0.00' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="已使用数量">{{ verifyResult.details.usedCount || 0 }}</el-descriptions-item>
|
||||
<el-descriptions-item label="不可退原因">{{ verifyResult.details.reason || '-' }}</el-descriptions-item>
|
||||
<el-descriptions
|
||||
v-if="verifyResult.details"
|
||||
:column="2"
|
||||
border
|
||||
size="small"
|
||||
>
|
||||
<el-descriptions-item label="可退数量">
|
||||
{{ verifyResult.details.refundableCount || 0 }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="可退金额">
|
||||
{{ verifyResult.details.refundableAmount || '¥0.00' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="已使用数量">
|
||||
{{ verifyResult.details.usedCount || 0 }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="不可退原因">
|
||||
{{ verifyResult.details.reason || '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="verifyVisible = false">关闭</el-button>
|
||||
<el-button v-if="verifyResult && verifyResult.success" type="primary" @click="handleSubmitRefund">
|
||||
<el-button @click="verifyVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="verifyResult && verifyResult.success"
|
||||
type="primary"
|
||||
@click="handleSubmitRefund"
|
||||
>
|
||||
确认退费
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
@close="close"
|
||||
>
|
||||
<vxe-table
|
||||
:row-config="{ isCurrent: true }" :data="recordList"
|
||||
:row-config="{ isCurrent: true }"
|
||||
:data="recordList"
|
||||
max-height="650"
|
||||
style="width: 100%"
|
||||
border
|
||||
|
||||