You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1791 lines
63 KiB

<template>
<div>
<div>
<div class="middlebox">
<div class="contenttitle">
体检查询 /
<span class="contenttitleBold">体检报告</span>
</div>
</div>
<div>
<!--查询条件-->
<PatientRegisterQueryNobtn orgEnable="Y" @triggerQuery="triggerQuery" />
</div>
<div style="display: flex;margin-top:7px">
<div :style="'display: block; width:' + (window.pageWidth - 110 - 10) + 'px;'">
<!--显示列表-->
<div style="display: flex">
<div :style="'background-color: #fff;padding: 10px;border-radius: 8px;width:' +
Math.floor(((window.pageWidth - 110 - 60) * 3) / 4) +
'px;'
">
<div @contextmenu.prevent="onContextmenu" id="report_tjbg">
<u-table :data="tableDatas" border ref="info" id="info"
:height="(window.pageHeight < 600) ? 230 : (window.pageHeight - 370)" highlight-current-row
@row-click="rowClick" size="small" row-key="patientRegisterId" @sort-change="handleSortChange"
@selection-change="handleSelectionChange" @row-contextmenu="rowContextmenu"
@table-body-scroll="scrollFull" use-virtual :row-height="35" big-data-checkbox
:data-changes-scroll-top="false">
<u-table-column :type="dragCol[0].type" width="40" align="center" />
<!--列可拖拽 key值很关键 -->
<u-table-column v-for="(item, index) in dragCol" v-if="index != 0" :key="`${item.label + index}`"
:type="dragCol[index].type" :min-width="dragCol[index].minWidth" :align="dragCol[index].align"
:label="dragCol[index].type ? '' : item.label" :prop="dragCol[index].prop"
:sortable="dragCol[index].type || dragCol[index].prop == 'sn' ? false : true"
:sort-method="(a, b) => chineseSort(a, b, dragCol[index].prop)"
:show-overflow-tooltip="dragCol[index].showTooltip">
<template slot-scope="scope">
<div v-if="dragCol[index].prop == 'sn'">
{{ scope.$index + 1 }}
</div>
<div v-else-if="dragCol[index].prop == 'completeFlag'"
:style="`color: ${setPrStatusColor(scope.row.isAudit, scope.row.completeFlag)}`">
{{ dddw(dict.completeFlag, "id", scope.row[dragCol[index].prop], "displayName") }}
</div>
<div v-else-if="dragCol[index].prop == 'birthDate'">
{{ scope.row[dragCol[index].prop].substring(0, 10) }}
</div>
<div v-else-if="dragCol[index].prop == 'isReportPrint'">
<i class="el-icon-printer" v-if="scope.row.isReportPrint == 'Y'"
style="font-size: 24px;color: green;"></i>
</div>
<div v-else-if="dragCol[index].prop == 'isLock'">
<i class="el-icon-lock" v-if="scope.row.isLock == 'Y'" style="font-size: 20px; color: red" />
</div>
<div
v-else-if="['isVip', 'isUpload', 'isUploadAppoint', 'isReceiveReport', 'isPushThirdResult'].includes(dragCol[index].prop)">
<el-checkbox :value="scope.row[dragCol[index].prop] == 'Y'" true-label="Y" false-label="N" />
</div>
<!-- String(scope.row[dragCol[index]?.prop]||'') 屏蔽没有字段-->
<div v-else>
{{ '\u200C' + String(scope.row[dragCol[index]?.prop] || '') }}
</div>
</template>
</u-table-column>
</u-table>
<div style="display: flex;justify-content:space-between;">
<div></div>
<div>
<span style="font-size:12px;">共:{{ loadOpts.totalCount }} 条记录,当前显示:{{ tableDatas.length
}}
条。</span>
</div>
</div>
</div>
</div>
<div :style="'background-color: #fff;padding: 10px;border-radius: 8px;margin-left: 10px;width:' +
Math.floor((window.pageWidth - 110 - 45 - 8) / 4) +
'px;'
">
<RegisterCheckStatus :patientRegisterId="selectedRow.id" :brushTimes="refParams.brushSummary" />
</div>
</div>
<!--项目状态-->
<SumAsbItemStatus :patientRegisterId="selectedRow.id" :tabChoosed="'1'"
:brushSummary="refParams.brushSummary" />
</div>
<!--按钮-->
<div style="margin-left: 10px; ">
<div class="listBtn">
<el-button type="primary" class="commonbutton" @click="btnReport(true)">预览报告</el-button>
</div>
<div class="listBtn">
<el-button type="primary" class="commonbutton" @click="btnReport(false)">打印报告</el-button>
</div>
<div class="listBtn">
<el-button type="primary" class="commonbutton" @click="btnGetReport('Y')">领取报告</el-button>
</div>
<div class="listBtn">
<el-button type="primary" class="commonbutton" @click="btnUpReport">上传Web</el-button>
</div>
<div class="listBtn">
<el-button type="primary" class="commonbutton" @click="btnCheckHistory">历次结果</el-button>
</div>
<div class="listBtn">
<el-dropdown @command="btnImportResult">
<el-button type="primary" class="commonbutton">
导入结果<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="pacs">导入检查结果</el-dropdown-item>
<el-dropdown-item command="lis">导入检验结果</el-dropdown-item>
<el-dropdown-item command="diAn">导入迪安结果</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="listBtn">
<el-dropdown @command="btnExportComm">
<el-button type="primary" class="commonbutton">
导出/推送<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="exp" @click="btnExport('report_tjbg')">人员信息导出</el-dropdown-item>
<el-dropdown-item command="zip" @click="exportZip">导出Zip</el-dropdown-item>
<el-dropdown-item command="jpg" @click="exportJpg">导出Jpg</el-dropdown-item>
<el-dropdown-item command="pdf" @click="btnReportExport(false)">导出 pdf 报告</el-dropdown-item>
<el-dropdown-item command="tsjh" @click="upTsjh">推送检后信息</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="listBtn" v-if="true">
<el-button type="primary" class="commonbutton" @click="btnTest">test</el-button>
</div>
</div>
</div>
</div>
<!--弹窗-->
<div>
<!-- 通用进度条 -->
<el-dialog title="数据处理中……" :visible.sync="elProgress.display" width="640px" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
<ElProgressOCX />
</el-dialog>
<el-dialog title="报告领取" :visible.sync="dialogGetReport" width="350px" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
<div>
<div class="query" style="display: flex; margin: 0 0 30px 10px">
<span class="spanClass">领取人</span>
<el-input placeholder="领取人" v-model="receiveReport.reportReceiveName" size="small" clearable
style="width: 120px" />
</div>
<div style="display: flex; justify-content: space-between">
<div></div>
<div style="display: flex">
<div>
<el-button type="primary" class="commonbutton" @click="btnGetReportOk">确定</el-button>
</div>
<div style="margin-left: 10px">
<el-button type="primary" class="commonbutton" @click="dialogGetReport = false">取消</el-button>
</div>
</div>
</div>
</div>
</el-dialog>
<el-dialog title="历次结果" :visible.sync="dialogVisibleCheckHistory" :close-on-click-modal="false" width="900px">
<div>
<el-tabs v-model="tabChoosed">
<!---->
<el-tab-pane label="明细结果" name="2">
<CheckDetails :patientRegisterId="selectedRow.id" :refParams="refParams" />
</el-tab-pane>
<el-tab-pane label="图文报告" name="4">
<ImageTextReport :refParams="refParams" />
</el-tab-pane>
<!-- <el-tab-pane label="项目对比" name="4">
<SumItemsType :patientId="doctorCheck.prBase.patientId" />
</el-tab-pane> -->
<el-tab-pane label="横向对比" name="5">
<SumItems :patientId="selectedRow.id" :refParams="refParams" />
</el-tab-pane>
<el-tab-pane label="历次综述" name="6">
<SumHistory :patientId="selectedRow.id" :refParams="refParams" />
</el-tab-pane>
</el-tabs>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import Sortable from "sortablejs";
import FileSaver from 'file-saver';
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import {
tcdate,
dddw, deepCopy,
objCopy,
arrayReduce,
arrayExistObj, setPrStatusColor
} from "@/utlis/proFunc";
import PatientRegisterQueryNobtn from "../../components/report/PatientRegisterQueryNobtn.vue";
import RegisterCheckStatus from "../../components/report/RegisterCheckStatus.vue";
import SumAsbItemStatus from "../../components/sumDoctorCheck/SumAsbItemStatus.vue";
import ElProgressOCX from "../../components/report/ElProgressOCX.vue";
//import PatientRegisterList from "../doctorCheck/PatientRegisterList.vue";
import CheckDetails from "../../components/sumDoctorCheck/CheckDetails.vue";
import SumItemsType from "../../components/sumDoctorCheck/SumItemsType.vue";
import SumItems from "../../components/sumDoctorCheck/SumItems.vue";
import SumHistory from "../../components/sumDoctorCheck/SumHistory.vue";
import OccDisease from "../../components/occDisease/OccDisease.vue";
import ImageTextReport from "../../components/occDisease/ImageTextReport.vue";
import { exportJsonToExcel } from "../../utlis/Export2Excel";
import PatientRegisterAsbItem from "../../components/patientRegister/patientRegisterAsbItem.vue";
import { UTable, UTableColumn } from "umy-ui";
export default {
components: {
PatientRegisterQueryNobtn,
RegisterCheckStatus,
PatientRegisterAsbItem, UTable, UTableColumn,
SumAsbItemStatus,
ElProgressOCX, CheckDetails, SumItemsType, SumItems, OccDisease, ImageTextReport
},
data() {
return {
patient_register_query_idno: 'Y', //身份证排他
patient_register_query_name: 'N', //姓名排他
dialogVisible: false,
dialogCamera: false,
dialogGuide: false,
guideMsg: 'guideMsg',
tabChoosed: "1",
formInitData: {}, //体检登记初始表单数据
editTimes: 0,
rClickRow: null, //右击的行
rClickColumn: null, //右击的列(预留)
dom: null, //用于滚动加载数据
lazyLoading: false, //是否懒加载中
loadOpts: {
totalCount: 0,
skipCount: 0,
maxResultCount: 100,
},
loadOptsInit: {},
summary_check_doctor_alias: ["总检", "审核"],
query: {
cusOrgOCXdisp: '',
ocxDatas: [],
times: 0, // 触发 查询条件 返回至列表组件
queryType: '', // 点击按钮 还是在条码栏里回车等
dateType: 'creationTime', //登记日期
dateRange: null, //日期范围
startDate: null,
endDate: null,
containRefuse: true, //包含弃检项目
times: 0, //触发查询次数
customerOrgId: "", //体检单位ID
CustomerOrgParentId: "", //单位父级ID
customerOrgFlag: true, //单位作为查询条件
customerOrgRegister: { id: '' }, //单位体检次数
customerOrgGroupIds: [], //体检分组
checkAsbs: null,
patientRegisterNo: '',
pacsNo: '',
lisNo: '',
patientName: '', //姓名
sex: '', //性别
idCardNo: '', //身份证号
isReportPrint: '', // 报告是否打印
isSeries: 'N',
isSmsComplete: "N",
isPhoneComplete: "N",
diagnosisLevelId: [],
medicalTypeIds: [],
completeFlags: [],
medicalConclusionId: [],
personnelTypeIds: [],
isRecoverGuide: '',
personnelTypeId: '',
completeFlag: '',
},
tableDatas: [],
selectedRow: {}, // 当个选中
checkedRows: [], // 勾选的记录数
//拖动列
selectionCol: 0,
dragCol: [
{ label: "勾选", type: "selection", minWidth: 40, align: "center" },
{ label: "序号", prop: "sn", minWidth: 40, align: "center" },
{ label: "打印", prop: "isReportPrint", minWidth: 60, align: "center" },
{ label: "领取", prop: "isReceiveReport", minWidth: 60, align: "center" },
{ label: "上传", prop: "isUpload", minWidth: 60, align: "center" },
{ label: "体检进度", prop: "completeFlag", minWidth: 90, align: "center" },
{ label: "体检日期", prop: "medicalStartDate", minWidth: 100, align: "center" },
{ label: "单位名称", prop: "org", minWidth: 180, align: "left", showTooltip: true },
{ label: "部门名称", prop: "dept", minWidth: 150, align: "left", showTooltip: true },
{ label: "姓名", prop: "patientName", minWidth: 60, align: "center" },
{ label: "性别", prop: "sexName", minWidth: 60, align: "center" },
{ label: "年龄", prop: "age", minWidth: 60, align: "center" },
{ label: "民族", prop: "nationName", minWidth: 70, align: "center" },
{ label: "身份证号", prop: "idNo", minWidth: 160, align: "center" },
{ label: "条码号", prop: "patientRegisterNo", minWidth: 110, align: "center" },
{ label: "档案号", prop: "patientNo", minWidth: 80, align: "center" },
{ label: "次数", prop: "medicalTimes", minWidth: 60, align: "center" },
{ label: "备注", prop: "remark", minWidth: 150, align: "left" },
{ label: "分组/套餐", prop: "groupPack", minWidth: 150, align: "center" },
{ label: "手机", prop: "mobileTelephone", minWidth: 130, align: "center" },
{ label: "电话", prop: "telephone", minWidth: 130, align: "center" },
{ label: "出生日期", prop: "birthDate", minWidth: 90, align: "center" },
{ label: "婚姻", prop: "maritalStatusName", minWidth: 70, align: "center" },
{ label: "地址", prop: "address", minWidth: 400, align: "left", showTooltip: true },
{ label: "体检卡号", prop: "medicalCardNo", minWidth: 90, align: "center" },
{ label: "工卡号", prop: "jobCardNo", minWidth: 90, align: "center" },
{ label: "体检类别", prop: "medicalTypeName", minWidth: 100, align: "center" },
{ label: "人员类别", prop: "personnelTypeName", minWidth: 100, align: "center" },
{ label: "职务", prop: "jobPost", minWidth: 70, align: "center" },
{ label: "职称", prop: "jobTitle", minWidth: 70, align: "center" },
{ label: "介绍人", prop: "salesman", minWidth: 80, align: "center" },
{ label: "VIP", prop: "isVip", minWidth: 80, align: "center" },
{ label: "总检医生", prop: "summaryDoctorName", minWidth: 90, align: "center" },
{ label: "总检日期", prop: "summaryDate", minWidth: 160, align: "center" },
{ label: "审核医生", prop: "auditDoctorName", minWidth: 90, align: "center" },
{ label: "审核日期", prop: "auditDate", minWidth: 160, align: "center" },
{ label: "登记人", prop: "registerName", minWidth: 80, align: "center" },
{ label: "登记时间", prop: "registerDate", minWidth: 160, align: "center" },
{ label: "打印人", prop: "reportPrintName", minWidth: 70, align: "center" },
{ label: "领取人", prop: "reportReceiveName", minWidth: 70, align: "center" },
{ label: "领取时间", prop: "reportReceiveDate", minWidth: 140, align: "center" },
{ label: "锁住", prop: "isLock", minWidth: 60, align: "center" },
{ label: "预约备单", prop: "isUploadAppoint", minWidth: 90, align: "center" },
{ label: "检后推送", prop: "isPushThirdResult", minWidth: 90, align: "center" },
// { label: "标准金额", prop: "standardAmount", minWidth: 80, align: "center" },
// { label: "应收金额", prop: "receivableAmount", minWidth: 80, align: "center" },
// { label: "实收金额", prop: "chargeAmount", minWidth: 80, align: "center" },
// { label: "支付方式", prop: "chargePayMode", minWidth: 80, align: "center" },
],
// 按钮部份
medical_report_print_after_summary_check_is_audit: 'N', // Y-审核后才可以打印报告,N-没审核未总检亦可以打印
dialogGetReport: false,
dialogVisibleCheckHistory: false,
tabChoosed: "2",
receiveReport: {
patientRegisterIds: [],
isReceiveReport: "Y",
reportReceiveName: "", //// 报告领取人
},
jsonFields: {},
xlsName: "",
// 历次明细
refParams: {
place: 'doctor',
brushSummary: 0,
brushTimes: 0,
patientRegisterId: ''
}
};
},
created() {
this.loadOptsInit = Object.assign({}, this.loadOpts)
this.tableDatas = []
try {
let LocalConfig = JSON.parse(
window.localStorage.getItem("LocalConfig") || null
);
if (LocalConfig?.normal?.maxResultCount) {
this.loadOpts.maxResultCount =
LocalConfig.normal.maxResultCount;
}
} catch (error) {
console.log('window.localStorage.getItem("LocalConfig")', error);
}
this.dictInit();
this.selectedRow.id = ""
},
//挂载完成
mounted() {
this.$nextTick(() => {
// this.scrollFull()
// 监听列拖拽
this.initColDrag()
})
},
computed: {
...mapState(["window", "dict", "elProgress"]),
},
methods: {
dddw, setPrStatusColor,
// 强制将单元格值转换为字符串
// forceStringFormatter(row, column, cellValue) {
// //console.log('row, column, cellValue',row, column.property, cellValue)
// // 如果 cellValue 存在,则转为字符串;否则返回原值
// if(['idNo','patientRegisterNo','patientNo','mobileTelephone','telephone'].includes(column.property)){
// return cellValue ? "\u200C" + String(cellValue) : cellValue
// }else{
// return cellValue
// }
// },
// 配合虚拟表导出
handleSortChange({column, prop, order}) {
// column: 当前列配置
// prop: 排序的字段名(对应列 prop)
// order: 排序顺序,可选值:'ascending', 'descending', null(取消排序)
console.log('排序变化:', column, prop, order)
// 执行自定义排序逻辑
if (order) {
this.tableDatas.sort((a, b) => {
let valA = a[prop], valB = b[prop]
if (typeof valA == 'string') {
if (['patientName', 'org', 'dept', 'address', 'remark'].includes(prop)) {
if (order === 'ascending') {
return valA.localeCompare(valB, 'zh');
} else {
return valB.localeCompare(valA, 'zh');
}
} else {
if (order === 'ascending') {
return valA.localeCompare(valB);
} else {
return valB.localeCompare(valA);
}
}
} else {
if (order === 'ascending') {
return valB > valB ? 1 : -1
} else {
return valA < valB ? 1 : -1
}
}
})
}
},
// 如果不想预处理,也可以在排序方法中动态计算
chineseSort(a, b, colName) {
// console.log('a, b', a, b)
// const pinyinA = pinyin(a[colName], { style: pinyin.STYLE_NORMAL }).join('');
// const pinyinB = pinyin(b[colName], { style: pinyin.STYLE_NORMAL }).join('');
let valA = a[colName], valB = b[colName]
if (typeof valA == 'string') {
// 单位、部门、姓名、地址、备注
if (['patientName', 'org', 'dept', 'address', 'remark'].includes(colName)) {
return valA.localeCompare(valB, 'zh');
} else {
return valA.localeCompare(valB);
}
} else {
return valA - valB
}
},
btnTest() {
console.log('this.tableDatas3', this.tableDatas)
},
//数据初始化
dictInit() {
//性别
getapi("/api/app/sex").then((res) => {
if (res.code != -1) {
this.dict.sex = res.data;
}
});
//体检中心
// getapi("/api/app/organization-units/organization-unit-by-is-peis").then(
// (res) => {
// if (res.code != -1) {
// this.dict.organization = res.data;
// }
// }
// );
//体检类别
getapi("/api/app/medical-type/in-filter").then((res) => {
if (res.code != -1) {
this.dict.medicalType = res.data;
}
});
//人员类别
getapi("/api/app/personnel-type/in-filter").then((res) => {
if (res.code != -1) {
this.dict.personnelType = res.data;
}
});
// 获取 是否审核才能打印报告
postapi("/api/app/SysParmValue/GetSysParmValueBySysParmId",
{ sysParmId: "medical_report_print_after_summary_check_is_audit" }
).then(res => {
if (res.code > -1) {
this.medical_report_print_after_summary_check_is_audit = res.data.toUpperCase() || 'N'
}
});
// 系统参数,获取 总检别名
postapi('/api/app/SysParmValue/GetSysParmValueBySysParmId', { sysParmId: "summary_check_doctor_alias" })
.then(res => {
if (res.code > -1) {
this.summary_check_doctor_alias = JSON.parse(res.data)
}
})
// 获取系统参数 -- 身份证排他
postapi("/api/app/SysParmValue/GetSysParmValueBySysParmId",
{ sysParmId: "patient_register_query_idno" }
).then((res) => {
if (res.code > -1) {
this.patient_register_query_idno = res.data || "Y";
}
});
// 获取系统参数 -- 姓名排他
postapi("/api/app/SysParmValue/GetSysParmValueBySysParmId",
{ sysParmId: "patient_register_query_name" }
).then((res) => {
if (res.code > -1) {
this.patient_register_query_name = res.data || "N";
}
});
},
// 触发查询
triggerQuery(queryCondition) {
console.log("triggerQuery.queryCondition", queryCondition)
this.query = Object.assign({}, queryCondition)
this.btnQuery()
},
handleSelectionChange(val) {
this.checkedRows = val
},
//获取单位分组 /api/app/customer-org-group/in-customer-org-id/3a0c0444-d7a0-871f-4074-19faf1655caf
// getCustomerOrgGroup(customerOrgld) {
// getapi(`/api/app/customer-org-group/in-customer-org-id/${customerOrgld}`)
// .then((res) => {
// console.log("getCustomerOrgGroup", res.data);
// if (res.code == 1) {
// this.patientRegister.customerOrgGroup = res.data;
// }
// });
// },
//点击体检次数行
rowClick(row) {
this.selectedRow = deepCopy(row)
this.selectedRow.id = row.patientRegisterId
// 刷新总检状态
this.refParams.patientRegisterId = row.patientRegisterId
this.refParams.brushSummary++ //同时刷新检查项目
},
async load() {
this.loadOpts.skipCount++
await this.reportQuery()
},
// 取消领取
canselGetReport() {
let body = {
patientRegisterIds: [],
isReceiveReport: 'N'
}
let rd = []
if (this.checkedRows && this.checkedRows.length > 0) {
rd = rd.concat(this.checkedRows)
}
if (rd.length == 0) {
if (this.selectedRow.patientRegisterId) rd.push({ patientRegisterId: this.selectedRow.patientRegisterId })
}
if (rd.length == 0) {
this.$message.warning({ showClose: true, message: "请先勾选或选择记录(有勾选人员时,仅操作勾选的记录)!" })
return
}
rd.forEach(e => {
body.patientRegisterIds.push(e.patientRegisterId)
});
postapi('/api/app/PatientRegister/BatchUpdatePatientRegisterReportReceive', body)
.then(res => {
if (res.code > -1) {
this.$message.success({ showClose: true, message: '操作成功!' })
let reportReceiveDate = moment(new Date()).format('yyyy-MM-DD HH:mm:ss')
let lfind = -1
body.patientRegisterIds.forEach(patientRegisterId => {
lfind = arrayExistObj(this.tableDatas, 'patientRegisterId', patientRegisterId)
if (lfind > -1) {
this.tableDatas[lfind].isReceiveReport = body.isReceiveReport
this.tableDatas[lfind].reportReceiveDate = reportReceiveDate
}
});
}
})
},
// 右击
rowContextmenu(row, column) {
this.selectedRow = deepCopy(row)
},
onContextmenu(event) {
// items.push({
// label: "一级菜单",
// children: [
// { label: "修改姓名", onClick: () => { this.fnUpBaseInfo(row, 'patientName'); } }
// ]
// })
let items = []
//取消领取报告
items.push({
label: '取消领取报告',
onClick: () => {
this.canselGetReport();
}
})
// 右击菜单显示
this.$contextmenu({
items,
event,
x: event.clientX,
y: event.clientY,
customClass: "custom-class",
zIndex: 3,
minWidth: 80,
});
return false;
},
//滚动加载数据
async scrollFull(scroll, event) {
if (!scroll.judgeFlse) return;
// 正在加载时阻止重复触发
if (this.lazyLoading) return;
if (
(Number(this.loadOpts.skipCount) + 1) *
Number(this.loadOpts.maxResultCount) >=
Number(this.loadOpts.totalCount)
) {
return;
}
this.lazyLoading = true;
try {
await this.load();
} catch (e) {
console.error('scrollFull load error', e);
}
// this.dom = this.$refs['info'].bodyWrapper
// console.log('this.dom', this.dom)
// this.dom.addEventListener('scroll', async () => {
// // console.log('scrollTop',this.dom.scrollTop,'clientHeight',this.dom.clientHeight,'scrollHeight',this.dom.scrollHeight);
// if (this.dom.scrollTop + this.dom.clientHeight + 20 > this.dom.scrollHeight && !this.lazyLoading) {
// // 获取到的不是全部数据 当滚动到底部
// console.log('scrollTop', this.dom.scrollTop, 'clientHeight', this.dom.clientHeight, 'scrollHeight', this.dom.scrollHeight);
// if (Number(this.loadOpts.skipCount) * Number(this.loadOpts.maxResultCount) >= Number(this.loadOpts.totalCount)) {
// this.lazyLoading = false
// } else {
// this.lazyLoading = true
// await this.load()
// this.lazyLoading = false
// // this.dom.scrollTop = this.dom.scrollTop - 100
// }
// }
// })
},
//监听拖拽
initColDrag() {
// 1. 获取表格的表头元素
const table = document.querySelector('.el-table__header-wrapper tr');
// 2. 创建 Sortable 实例
Sortable.create(table, {
animation: 150, // 拖拽动画时长
// 开始拖拽的时候
onStart: (event) => {
if (event.oldIndex == 0) {
this.$alert('第1列不可以拖动', '提示')
}
//evt.oldIndex; // element index within parent
},
// 3. 监听拖拽结束事件
onEnd: (event) => {
const { oldIndex, newIndex } = event;
// 4. 更新列定义数组的顺序
let movedColumn = this.dragCol.splice(oldIndex, 1)[0];
this.dragCol.splice(newIndex, 0, movedColumn);
//this.selectionCol = arrayExistObj(this.dragCol,'type','selection')
// 5. 强制表格重新渲染以更新视图
//this.tableBrush += 1;
}
});
},
lmoment(date, forMat) {
return moment(new Date(date)).format(forMat);
},
//查询
btnQuery() {
this.loadOpts.skipCount = 0
this.reportQuery()
},
// 显示数据转换
prListTrans(items) {
let arr = []
if (Array.isArray(items) && items.length > 0) {
arr = items
arr.forEach(e => {
e.groupPack = e.medicalPackageName || e.customerOrgGroupName
e.org = e.customerOrgName || e.departmentName
e.dept = e.customerOrgName == e.departmentName ? '' : e.departmentName
});
}
return arr
},
// 报告查询
reportQuery() {
console.log('reportQuery this.loadOpts', this.loadOpts)
if (this.loadOpts.skipCount != 0 && this.loadOpts.skipCount * this.loadOpts.maxResultCount >= this.loadOpts.totalCount) return
let body = {
skipCount: this.loadOpts.skipCount,
maxResultCount: this.loadOpts.maxResultCount
};
let queryType = this.query.queryType
if (!queryType) {
// 排他条件有值时
if (this.query.patientRegisterNo) {
queryType = "patientRegisterNo"
} else if (this.query.patientNo) {
queryType = "patientNo"
} else if (this.query.idCardNo) {
queryType = "idCardNo"
} else if (this.query.patientName) {
queryType = "patientName"
}
}
// 优选精准查找
switch (queryType) {
case "patientRegisterNo":
// 条码号排他
body = {
patientRegisterNo: this.query.patientRegisterNo,
skipCount: this.loadOpts.skipCount,
maxResultCount: this.loadOpts.maxResultCount
}
break;
case "patientNo":
// 条码号排他
body = {
patientNo: this.query.patientNo,
skipCount: this.loadOpts.skipCount,
maxResultCount: this.loadOpts.maxResultCount
}
break;
case "idCardNo":
// 判断身份证是否排他
body.idNo = this.query.idCardNo
if (this.patient_register_query_idno == 'Y') {
body = {
idNo: this.query.idCardNo,
skipCount: this.loadOpts.skipCount,
maxResultCount: this.loadOpts.maxResultCount
}
} else {
queryType = ''
}
break;
case "patientName":
// 判断姓名是否排他
body.patientName = this.query.patientName
if (this.patient_register_query_name == 'Y') {
body = {
patientName: this.query.patientName,
skipCount: this.loadOpts.skipCount,
maxResultCount: this.loadOpts.maxResultCount
}
} else {
queryType = ''
}
break;
default:
queryType = ''
break;
}
// 非排他时查询
if (!queryType) {
let customerOrgs = [];
if (this.query.ocxDatas.length > 0) {
this.query.ocxDatas.forEach(e => {
let dateType = '1'
switch (e.dateType) {
case 'medicalStartDate':
case '2':
dateType = '2'
break;
case 'checkDate':
case '4':
dateType = '4'
break;
case 'summaryDate':
case '3':
dateType = '3'
break;
case 'sumCheckDate':
case '5':
dateType = '5'
break;
default:
break;
}
let rd = {
startDate: moment(e.startDate).format('yyyy-MM-DD'),
endDate: moment(e.endDate).format('yyyy-MM-DD'),
dateType
}
if (e.customerOrgId) {
rd.customerOrgId = e.customerOrgId
if (e.customerOrgId == this.dict.personOrgId) {
rd.customerOrgRegisterId = null
rd.customerOrgGroupId = []
} else {
rd.customerOrgRegisterId = e.customerOrgRegister.id
rd.customerOrgGroupId = e.customerOrgGroupIds
}
}
customerOrgs.push(rd)
})
}
body.customerOrgs = customerOrgs
if (this.query.phone) body.phone = this.query.phone
if (this.query.completeFlag) body.completeFlag = this.query.completeFlag
if (this.query.sex) body.sexId = this.query.sex
if (this.query.isAudit) body.isAudit = this.query.isAudit
if (this.query.isReportPrint) body.isReportPrint = this.query.isReportPrint
if (this.query.isUpload) body.isUpload = this.query.isUpload
if (this.query.medicalTypeIds && this.query.medicalTypeIds.length > 0) body.medicalTypeIds = this.query.medicalTypeIds
if (this.query.personnelTypeId) body.personnelTypeId = this.query.personnelTypeId
if (this.query.medicalConclusionId && this.query.medicalConclusionId.length > 0) body.medicalConclusionIds = this.query.medicalConclusionId
}
//console.log('/api/app/peisreport/getpatientregisterreport',body)
// 带收费信息 /api/app/PeisReport/GetPatientRegisterReportWithCharge
// 不带收费信息 /api/app/patientregister/getlistinfilter
postapi('/api/app/peisreport/getpatientregisterreport', body).then(res => {
if (res.code > -1) {
this.lazyLoading = false
// 连续扫码
// console.log('this.query',this.query)
if (this.query.isSeries == 'Y' && this.query.patientRegisterNo) {
if (res.data.items.length > 0 && arrayExistObj(this.tableDatas, 'patientRegisterId', res.data.items[0].patientRegisterId) == -1) {
this.tableDatas = this.tableDatas.concat(this.prListTrans(res.data.items))
}
if (this.tableDatas.length > 0 && res.data.items.length > 0) {
let lfind = arrayExistObj(this.tableDatas, 'patientRegisterId', res.data.items[0].patientRegisterId)
if (lfind > -1) {
// this.$refs['info'].setCurrentRow();
this.$nextTick(() => {
setTimeout(() => {
this.$refs['info'].setCurrentRow(this.tableDatas[lfind]);
}, 20)
})
this.rowClick(this.tableDatas[lfind])
}
}
// 连续扫码,自动选中新扫的码 (换成虚拟表后,无法自动勾选了)
// this.$nextTick(function () {
// this.tableDatas.forEach(row => {
// this.$refs['info'].toggleRowSelection(row)
// })
// });
} else {
// 刷新最大记录数
this.loadOpts.totalCount = res.data.totalCount
if (body.skipCount == 0) { //查询
this.tableDatas = [];
}
this.tableDatas = this.tableDatas.concat(this.prListTrans(res.data.items))
if (body.skipCount == 0 && this.tableDatas.length > 0) {
this.rowClick(this.tableDatas[0])
this.$refs['info'].setCurrentRow();
this.$refs['info'].setCurrentRow(this.tableDatas[0]);
} else {
this.$refs['info'].setCurrentRow();
this.selectedRow = { id: '' }
// 刷新总检状态(检查项目)
this.refParams.brushSummary++
}
}
}
})
},
exportJpg() {
if (!this.$peisAPI) {
this.$message.info({
showClose: true,
message: "此功能,需要在壳客户端才可运行!",
});
return;
}
if (
!(
this.checkedRows &&
this.checkedRows.length > 0
)
) {
this.$message.warning({ showClose: true, message: "请勾选择记录!" });
return;
}
this.$peisAPI
.openDirectoryDialog()
.then((res) => {
let lres = JSON.parse(res);
if (lres.code > -1 && lres.data) {
this.report2Jpg(JSON.parse(lres.data).directory);
}
console.log("lres", lres);
})
.catch((err) => {
this.$message.error(err);
});
},
async report2Jpg(path) {
this.elProgress.display = true;
this.elProgress.percentage = 0;
let token = window.sessionStorage.getItem("token");
let toOutShell = {
localPath: path,
token,
patientRegisterId: "",
};
for (
let i = 0;
i < this.checkedRows.length;
i++
) {
let e = this.checkedRows[i];
this.elProgress.percentage = Math.floor(
((i + 1) * 100) / this.checkedRows.length
);
// 导出pdf
try {
toOutShell.patientRegisterId = e.patientRegisterId;
let jsonToOutShell = JSON.stringify(toOutShell);
console.log("toOutShell", jsonToOutShell);
let res = await this.$peisAPI.exportDcmjpg(jsonToOutShell);
if (JSON.parse(res).code < 0) {
console.log("this.$peisAPI.exportDcmjpg err", res);
}
} catch (error) {
console.log("error", error);
this.$message.warning({ showClose: true, message: error });
}
}
this.elProgress.display = false;
},
// 历次结果
btnCheckHistory() {
if (!this.selectedRow.id) return;
this.dialogVisibleCheckHistory = true;
this.refParams = Object.assign({}, this.refParams, { brushTimes: Number(this.refParams.brushTimes) + 1, patientRegisterId: this.selectedRow.id })
},
exportZip() {
if (!this.$peisAPI) {
this.$message.info({
showClose: true,
message: "此功能,需要在壳客户端才可运行!",
});
return;
}
if (
!(
this.checkedRows &&
this.checkedRows.length > 0
)
) {
this.$message.warning({ showClose: true, message: "请勾选择记录!" });
return;
}
this.$peisAPI
.openDirectoryDialog()
.then((res) => {
let lres = JSON.parse(res);
if (lres.code > -1 && lres.data) {
this.report2Zip(JSON.parse(lres.data).directory);
}
console.log("lres", lres);
})
.catch((err) => {
this.$message.error(err);
});
},
async report2Zip(path) {
this.elProgress.display = true;
this.elProgress.percentage = 0;
let token = window.sessionStorage.getItem("token");
let toOutShell = {
localPath: path,
token,
patientRegisterId: "",
};
for (
let i = 0;
i < this.checkedRows.length;
i++
) {
let e = this.checkedRows[i];
this.elProgress.percentage = Math.floor(
((i + 1) * 100) / this.checkedRows.length
);
// 导出pdf
try {
toOutShell.patientRegisterId = e.patientRegisterId;
let jsonToOutShell = JSON.stringify(toOutShell);
console.log("toOutShell", jsonToOutShell);
let res = await this.$peisAPI.exportDcmZip(jsonToOutShell);
if (JSON.parse(res).code < 0) {
console.log("this.$peisAPI.exportDcmZip err", res);
}
} catch (error) {
console.log("error", error);
this.$message.warning({ showClose: true, message: error });
}
}
this.elProgress.display = false;
},
// 导入结果
btnImportResult(checkType) {
if (!this.selectedRow.id) {
this.$message.warning({ showClose: true, message: "请先选择记录!" });
return;
}
let url = '/api/app/ImportLisResult/ImportResultByPatientRegisterId'
let patientRegisterId = this.selectedRow.id
switch (checkType) {
case 'pacs':
url = '/api/app/ImportPacsResult/ImportResultByPatientRegisterId'
postapi(url, { patientRegisterId })
.then(res => {
if (res.code > -1) {
// 心电图(格尔木)
return postapi('/api/app/ImportElectrocardiogramResult/ImportElectrocardiogramResultByPatientRegisterId', { patientRegisterId })
}
})
.then(res => {
if (res && res.code > -1) {
this.$message.success({ showClose: true, message: '导入成功!' })
}
})
break;
case 'diAn':
url = "/api/app/ImportLisResult/ImportDianResultByPatientRegisterId";
postapi(url, { patientRegisterId }).then(res => {
if (res.code > -1) {
this.$message.success({ showClose: true, message: '导入成功!' })
}
})
break;
default: //lis
postapi(url, { patientRegisterId }).then(res => {
if (res.code > -1) {
this.$message.success({ showClose: true, message: '导入成功!' })
}
})
break;
}
},
// 导入结果
btnExportComm(checkType) {
switch (checkType) {
case 'zip':
this.exportZip()
break;
case 'jpg':
this.exportJpg()
break;
case 'pdf':
this.btnReportExport(false)
break;
case 'tsjh': // 推送检后--健康评估
this.upTsjh()
break;
default: //lis
this.btnExport('report_tjbg') // 非虚拟表导出
this.btnExportV() // 非虚拟表导出
break;
}
},
//领取体检报告(提交)
btnGetReportOk() {
postapi(
"/api/app/PatientRegister/BatchUpdatePatientRegisterReportReceive",
this.receiveReport
).then((res) => {
if (res.code > -1) {
this.$message.success({ showClose: true, message: "操作成功!" });
let reportReceiveDate = moment(new Date()).format(
"yyyy-MM-DD HH:mm:ss"
);
let lfind = -1;
this.receiveReport.patientRegisterIds.forEach((patientRegisterId) => {
lfind = arrayExistObj(
this.tableDatas,
"patientRegisterId",
patientRegisterId
);
if (lfind > -1) {
this.tableDatas[lfind].isReceiveReport =
this.receiveReport.isReceiveReport;
this.tableDatas[lfind].reportReceiveName =
this.receiveReport.reportReceiveName;
this.tableDatas[lfind].reportReceiveDate =
reportReceiveDate;
}
});
this.dialogGetReport = false;
}
});
},
//领取体检报告(按钮)
btnGetReport(isReceiveReport) {
//console.log('this.selectedRow.id',this.selectedRow.id,this.checkedRows)
let rd = [];
if (
this.checkedRows &&
this.checkedRows.length > 0
) {
rd = rd.concat(this.checkedRows);
}
if (rd.length == 0) {
if (this.selectedRow.id)
rd.push({
patientRegisterId: this.selectedRow.id,
});
}
if (rd.length == 0) {
this.$message.warning({
showClose: true,
message: "请先勾选或选择记录(有勾选人员时,仅操作勾选的记录)!",
});
return;
}
let lfind = arrayExistObj(
this.tableDatas,
"patientRegisterId",
rd[0].patientRegisterId
);
if (lfind > -1) {
this.receiveReport.reportReceiveName =
this.tableDatas[lfind].patientName;
}
this.receiveReport.patientRegisterIds = [];
this.receiveReport.isReceiveReport = isReceiveReport;
rd.forEach((e) => {
this.receiveReport.patientRegisterIds.push(e.patientRegisterId);
});
//
// {
// "patientRegisterIds": [
// "3fa85f64-5717-4562-b3fc-2c963f66afa6"
// ],
// "isReceiveReport": "string",
// "reportReceiveName": "string"
// }
this.dialogGetReport = true;
},
//上传报告
async btnUpReport() {
if (!this.$peisAPI) {
this.$message.info({
showClose: true,
message: "此功能,需要在壳客户端才可运行!",
});
return;
}
if (
this.checkedRows &&
this.checkedRows.length > 0
) {
this.elProgress.display = true;
this.elProgress.percentage = 0;
let ReportCode = "0005";
let token = window.sessionStorage.getItem("token");
let user = window.sessionStorage.getItem("user");
let toOutShell = {
ReportCode,
token,
isBuildImage: "N",
IsUploadPdf: "N",
preViewCanPrint: "Y",
BusinessCode: "",
Parameters: [
{ Name: "printer", Value: user },
{ Name: "LTS", Value: "Y" }, //Y、N N只看不能打印
{ Name: "firstPage", Value: "pic/peisReportFirstPage.jpg" }, //报告首页主图
{ Name: "pageHeader", Value: "pic/peisReportPageHeader.jpg" }, //报告页眉图片
{ Name: "pageFooter", Value: "pic/peisReportPageFooter.jpg" }, //报告页脚图片
{ Name: "orgSign", Value: "pic/orgSign.png" }, // 体检章
{ Name: "picExtOne", Value: "pic/hisLog.jpg" }, // 院徽
{ Name: "picExtTwo", Value: "pic/orgSignCom.png" }, // 单位公章
{ Name: "resultSign", Value: "pic/resultSign.png" }, // 结果章,如:职业病(本次体检未发现职业性异常)
{ Name: "picExtThree", Value: "pic/peisQrCode.jpg" }, // 公众号二维码
{ Name: "picExtFour", Value: "pic/peisQrCodeMini.jpg" }, // 小程序二维码
],
IsHealthReport: "Y",
};
for (
let i = 0;
i < this.checkedRows.length;
i++
) {
let e = this.checkedRows[i];
this.elProgress.percentage = Math.floor(
((i + 1) * 100) / this.checkedRows.length
);
// 调上传接口
try {
if (e.completeFlag == "3") {
toOutShell.BusinessCode = e.patientRegisterId;
toOutShell.customerOrgName = e.customerOrgName || ""; // 增加单位名称参数
toOutShell.departmentName = e.departmentName || "";
let jsonToOutShell = JSON.stringify(toOutShell);
console.log("toOutShell", jsonToOutShell);
let res = await this.$peisAPI.upLoadReportPdf(jsonToOutShell);
if (JSON.parse(res).code < 0) {
this.$message.error({ showClose: true, message: res.message });
console.log("$peisAPI.upLoadReportPdf err", res);
} else {
// 上传成功 ,更新上传传状态
e.isUpload = "Y";
// console.log('btnUpReport success', JSON.parse(res))
}
} else {
let patientRegisterId = e.patientRegisterId;
let res2 = await postapi(
"/api/app/TransToWebPeis/TransPatientRegisterByPatientRegisterId",
{ patientRegisterId }
);
if (res2.code == -1) {
console.log("TransToWebPeis err", res2);
} else {
// 上传成功 ,更新备单状态
e.isUploadAppoint = "Y";
}
}
} catch (error) {
console.log("error", error);
this.$message.warning({ showClose: true, message: error });
}
}
this.elProgress.display = false;
} else {
this.$message.warning({ showClose: true, message: "请勾选择记录!" });
return;
}
},
//推送检后信息--健康评估
async upTsjh() {
if (
this.checkedRows &&
this.checkedRows.length > 0
) {
this.elProgress.display = true;
this.elProgress.percentage = 0;
for (
let i = 0;
i < this.checkedRows.length;
i++
) {
let e = this.checkedRows[i];
this.elProgress.percentage = Math.floor(
((i + 1) * 100) / this.checkedRows.length
);
// 调上传接口
try {
let res = await postapi('/api/app/ThirdResultPush/PushHtyResultByPatientRegisterId', { patientRegisterId: e.patientRegisterId })
if (res.code > -1) {
// 推送检后成功,更新状态
e.isPushThirdResult = "Y";
}
} catch (error) {
console.log("error", error);
this.$message.warning({ showClose: true, message: error });
}
}
this.elProgress.display = false;
} else {
this.$message.warning({ showClose: true, message: "请勾选择记录!" });
return;
}
},
//体检报告打印(预览)
async btnReport(isPreview) {
if (!this.$peisAPI) {
this.$message.info({
showClose: true,
message: "此功能,需要在壳客户端才可运行!",
});
return;
}
///3a0c990e-5756-2dc0-19d5-69a617fe4048 isPatientOccupationalDisease patientRegisterId completeFlag isAudit
let rds = this.getChoosedRds();
if (rds.length == 0) return;
let ReportCode = "0005";
if (rds[0].isPatientOccupationalDisease == "Y") ReportCode = "0006";
let token = window.sessionStorage.getItem("token");
let user = window.sessionStorage.getItem("user");
let toOutShell = {
ReportCode,
TemplateCode: undefined, // 新加打印模版
token,
isBuildImage: "N",
IsUploadPdf: "N",
preViewCanPrint: "Y",
BusinessCode: rds[0].patientRegisterId,
Parameters: [
{ Name: "printer", Value: user },
{ Name: "LTS", Value: "Y" }, //Y、N N只看不能打印
{ Name: "firstPage", Value: "pic/peisReportFirstPage.jpg" }, //报告首页主图
{ Name: "pageHeader", Value: "pic/peisReportPageHeader.jpg" }, //报告页眉图片
{ Name: "pageFooter", Value: "pic/peisReportPageFooter.jpg" }, //报告页脚图片
{
Name: "orgSign",
Value:
rds[0].isPatientOccupationalDisease == "Y"
? "pic/orgSignOcc.png"
: "pic/orgSign.png",
}, // 体检章
{ Name: "picExtOne", Value: "pic/hisLog.jpg" }, // 院徽
{ Name: "picExtTwo", Value: "pic/orgSignCom.png" }, // 单位公章
{ Name: "resultSign", Value: "pic/resultSign.png" }, // 结果章,如:职业病(本次体检未发现职业性异常)
{ Name: "picExtThree", Value: "pic/peisQrCode.jpg" }, // 公众号二维码
{ Name: "picExtFour", Value: "pic/peisQrCodeMini.jpg" }, // 小程序二维码
{ Name: "picExtFive", Value: "pic/sumDoctorSign.jpg" }, // 总检签名(部份企业固定才用)
{ Name: "picExtSix", Value: "pic/auditDoctorSign.jpg" }, // 总检审核签名(部份企业固定才用)
],
};
let JSONtoOutShell = ''
if (isPreview) {
toOutShell.ReportCode =
rds[0].isPatientOccupationalDisease == "Y" ? "0006" : "0005";
toOutShell.BusinessCode = rds[0].patientRegisterId;
// 选择报告打印模版
if (toOutShell.ReportCode == "0005" && rds[0].reportFormatTemplateId) toOutShell.TemplateCode = rds[0].reportFormatTemplateId
// 审核了才可以打印
if (this.medical_report_print_after_summary_check_is_audit == 'Y') {
//if (rd.completeFlag != "3") toOutShell.preViewCanPrint = "N";
if (rds[0].isAudit == "N") toOutShell.preViewCanPrint = "N";
}
JSONtoOutShell = JSON.stringify(toOutShell);
console.log("$peisAPI.printPre", toOutShell, JSONtoOutShell);
this.$peisAPI
.printPre(JSONtoOutShell)
.then((res) => {
if (JSON.parse(res).code < 0) {
this.$message.warning({
showClose: true,
message: JSON.parse(res).message,
});
}
})
.catch((err) => {
console.log("预览体检报告错误", err);
this.$message.warning({ showClose: true, message: `${err}` });
});
} else {
let lfind = -1;
for (let i = 0; i < rds.length; i++) {
let rd = rds[i];
toOutShell.ReportCode =
rd.isPatientOccupationalDisease == "Y" ? "0006" : "0005";
toOutShell.BusinessCode = rd.patientRegisterId;
// 选择报告打印模版
if (toOutShell.ReportCode == "0005" && rd.reportFormatTemplateId) toOutShell.TemplateCode = rd.reportFormatTemplateId
// 审核了才可以打印
if (this.medical_report_print_after_summary_check_is_audit == 'Y') {
//if (rd.completeFlag != "3") toOutShell.preViewCanPrint = "N";
if (rd.isAudit == "N") toOutShell.preViewCanPrint = "N";
}
if (toOutShell.preViewCanPrint == "N") {
this.$message.warning({
showClose: true,
message: "未总检或未审核,不可打印报告",
});
continue;
}
try {
JSONtoOutShell = JSON.stringify(toOutShell);
// 防止打印太多数据 只输出 第一条
if (i == 0) console.log('this.$peisAPI.print', toOutShell, JSONtoOutShell)
let lres = await this.$peisAPI.print(JSONtoOutShell);
if (JSON.parse(lres).code < 0) {
this.$message.warning({
showClose: true,
message: JSON.parse(lres).message,
});
} else {
postapi(
"/api/app/patientregister/updatepatientregisterreportprinttimesmany",
[rd.patientRegisterId]
).then((res) => {
if (res.code > -1) {
lfind = arrayExistObj(
this.tableDatas,
"patientRegisterId",
rd.patientRegisterId
);
if (lfind > -1)
this.tableDatas[lfind].isReportPrint = "Y";
}
});
}
} catch (error) {
this.$message.warning({ showClose: true, message: error });
}
}
}
},
// 导出 pdf 报告
btnReportExport() {
if (!this.$peisAPI) {
this.$message.info({
showClose: true,
message: "此功能,需要在壳客户端才可运行!",
});
return;
}
if (
!(
this.checkedRows &&
this.checkedRows.length > 0
)
) {
this.$message.warning({ showClose: true, message: "请勾选择记录!" });
return;
}
this.$peisAPI
.openDirectoryDialog()
.then((res) => {
let lres = JSON.parse(res);
if (lres.code > -1 && lres.data) {
this.report2pdf(JSON.parse(lres.data).directory);
}
console.log("lres", lres);
})
.catch((err) => {
this.$message.error(err);
});
},
async report2pdf(path) {
if (this.checkedRows.length < 1) return;
this.elProgress.display = true;
this.elProgress.percentage = 0;
let ReportCode = "0005";
if (
this.checkedRows[0]
.isPatientOccupationalDisease == "Y"
)
ReportCode = "0006";
let token = window.sessionStorage.getItem("token");
let user = window.sessionStorage.getItem("user");
let toOutShell = {
ReportCode,
token,
isBuildImage: "N",
IsUploadPdf: "N",
preViewCanPrint: "Y",
BusinessCode: "",
Parameters: [
{ Name: "printer", Value: user },
{ Name: "LTS", Value: "Y" }, //Y、N N只看不能打印
{ Name: "firstPage", Value: "pic/peisReportFirstPage.jpg" }, //报告首页主图
{ Name: "pageHeader", Value: "pic/peisReportPageHeader.jpg" }, //报告页眉图片
{ Name: "pageFooter", Value: "pic/peisReportPageFooter.jpg" }, //报告页脚图片
{
Name: "orgSign",
Value:
this.checkedRows[0]
.isPatientOccupationalDisease == "Y"
? "pic/orgSignOcc.png"
: "pic/orgSign.png",
}, // 体检章
{ Name: "picExtOne", Value: "pic/hisLog.jpg" }, // 院徽
{ Name: "picExtTwo", Value: "pic/orgSignCom.png" }, // 单位公章
{ Name: "resultSign", Value: "pic/resultSign.png" }, // 结果章,如:职业病(本次体检未发现职业性异常)
{ Name: "picExtThree", Value: "pic/peisQrCode.jpg" }, // 公众号二维码
{ Name: "picExtFour", Value: "pic/peisQrCodeMini.jpg" }, // 小程序二维码
],
IsHealthReport: "Y",
};
for (
let i = 0;
i < this.checkedRows.length;
i++
) {
let e = this.checkedRows[i];
this.elProgress.percentage = Math.floor(
((i + 1) * 100) / this.checkedRows.length
);
// 导出pdf
try {
// 石家庄长城 手动导出没有总检也可以导出
//if (e.completeFlag == "3") {
toOutShell.BusinessCode = e.patientRegisterId;
toOutShell.ExportDirectory = `${path}\\${e.patientName}_${e.patientRegisterNo}.pdf`;
toOutShell.customerOrgName = e.customerOrgName || ""; // 增加单位名称参数
toOutShell.departmentName = e.departmentName || "";
let jsonToOutShell = JSON.stringify(toOutShell);
console.log("toOutShell", jsonToOutShell);
let res = await this.$peisAPI.exportToPdfPre(jsonToOutShell);
if (JSON.parse(res).code < 0) {
console.log("this.$peisAPI.exportToPdfPre err", res);
}
//}
} catch (error) {
console.log("error", error);
this.$message.warning({ showClose: true, message: error });
}
}
this.elProgress.display = false;
},
//按条码号查个人数据
getPatientRegister(patientRegisterNo) {
if (!patientRegisterNo) return;
postapi(
"/api/app/patientregister/GetAlreadyRegisterPatientRegisterByNo",
{ patientRegisterNo }
).then((res) => {
if (res.code > -1) {
this.selectedRow = deepCopy(res.data);
}
});
},
// 通用判断 是否有选中或勾选记录(同时有选中与勾选记录时,以勾选记录为主)
getChoosedRds() {
let rd = [];
if (
this.checkedRows &&
this.checkedRows.length > 0
) {
rd = rd.concat(this.checkedRows);
}
if (rd.length == 0) {
if (this.selectedRow.id) {
let lfind = arrayExistObj(
this.tableDatas,
"patientRegisterId",
this.selectedRow.id
);
if (lfind > -1)
rd.push(
this.tableDatas.slice(lfind, Number(lfind) + 1)
);
}
}
if (rd.length == 0) {
this.$message.warning({
showClose: true,
message: "请先勾选或选择记录(有勾选人员时,仅操作勾选的记录)!",
});
}
return rd;
},
//通用导出(此方法,不适用虚拟表格)
btnExport(elId) {
let table = document.getElementById(elId);
let tableData = table.innerHTML
let fileName = moment(new Date()).format('yyyyMMDDHHmmss') + '.xls'
let blob = new Blob([tableData], { type: "text/plain;charset=utf-8" });
FileSaver.saveAs(blob, fileName);
},
btnExportV() {
require.ensure([], () => {
const tHeader = [];
const filterVal = [];
this.dragCol.forEach((e) => {
tHeader.push(e.label);
filterVal.push(e.prop);
});
const list = this.tableDatas.map((row, index) => {
const newRow = { ...row }; // 创建副本,避免修改原数据
// 使用对象映射优化数据转换
newRow.sn = index + 1;
if (newRow.completeFlag)
newRow.completeFlag =
newRow.isAudit == "Y"
? "已审核"
: dddw(
this.dict.completeFlag,
"id",
newRow.completeFlag,
"displayName"
);
newRow.isReportPrint = newRow.isReportPrint == "Y" ? "√" : "";
if (newRow.idNo) newRow.idNo = "\u200C" + newRow.idNo;
if (newRow.patientRegisterNo)
newRow.patientRegisterNo = "\u200C" + newRow.patientRegisterNo;
if (newRow.patientNo) newRow.patientNo = "\u200C" + newRow.patientNo;
if (newRow.isLock) newRow.isLock = newRow.isLock == "Y" ? "√" : "";
if (newRow.isVip) newRow.isVip = newRow.isVip == "Y" ? "√" : "";
if (newRow.isUpload)
newRow.isUpload = newRow.isUpload == "Y" ? "√" : "";
if (newRow.isUploadAppoint)
newRow.isUploadAppoint = newRow.isUploadAppoint == "Y" ? "√" : "";
if (newRow.isReceiveReport)
newRow.isReceiveReport = newRow.isReceiveReport == "Y" ? "√" : "";
if (newRow.birthDate)
newRow.birthDate = moment(newRow.birthDate).format("yyyy-MM-DD");
return newRow;
});
const data = list.map((v) => filterVal.map((j) => v[j]));
exportJsonToExcel(
tHeader,
data,
"人员列表" + moment(new Date()).format("yyyyMMDDHHmmss")
); //"列表excel" 是下载后的表名 可修改
});
},
},
//监听事件
watch: {
//触发查询事件
// "query.times": {
// // immediate:true,
// handler(newVal, oldVal) {
// console.log('watch:query.times', newVal, oldVal)
// if (newVal != oldVal) {
// this.btnQuery();
// }
// }
// },
},
};
</script>
<style scoped>
@import '../../assets/css/global_card.css';
@import '../../assets/css/global_input.css';
@import '../../assets/css/global_table.css';
@import '../../assets/css/global.css';
.query {
margin-left: 10px;
font-size: 14px;
color: #232748;
font-weight: 400;
font-family: "NotoSansSC-Regular";
}
.spanClass {
padding: 0 2px 0 0;
}
.listBtn {
margin-top: 5px;
/*
text-align: center;
*/
}
.btnClass {
width: 100px;
}
</style>