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.
 
 
 

1442 lines
53 KiB

<template>
<div>
<!--组件主体-->
<div style="display: flex">
<div :style="'width:' + (window.pageWidth - 200 - 145) + 'px;'" @contextmenu.prevent="onContextmenu">
<div>
<el-table @body-scrolling="load" :data="tableData" border
:height="window.pageHeight < 600 ? 248 : Math.floor(((window.pageHeight - 250) * 2) / 3)"
highlight-current-row @row-click="rowClick" size="small" row-key="id"
@selection-change="handleSelectionChange" @cell-contextmenu="onCellRightClick" ref="info" id="info"
:row-class-name="handleRowClassName">
<!-- 取消勾选改为选中
<el-table-column type="selection" width="40" show-overflow-tooltip/>
:height="window.pageHeight < 600 ? 202 : Math.floor(((window.pageHeight - 302) * 2) / 3)"
-->
<el-table-column v-for="(item, index) in headerCols" :key="`col_${index}`"
:min-width="dropCol[index].minWidth" :align="dropCol[index].align" :label="item.label"
:prop="dropCol[index].prop" :sortable="dropCol[index].prop == 'sn' ? false : true">
<template slot-scope="scope">
<div v-if="dropCol[index].prop == 'sn'">
{{ scope.$index + 1 }}
</div>
<div v-else-if="dropCol[index].prop == 'completeFlag'"
:style="`color: ${setColor(scope.row.isAudit, scope.row.completeFlag)}`">
{{ scope.row.isAudit == 'Y' ? "已审核" : dddw(dict.completeFlag, "id", scope.row.completeFlag,
"displayName") }}
</div>
<div v-else-if="dropCol[index].prop == 'guidePrintTimes'">
<i class="el-icon-printer" v-if="scope.row.guidePrintTimes > 0" style="font-size: 20px; color: green" />
</div>
<div v-else-if="dropCol[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="dropCol[index].prop == 'isVip' || dropCol[index].prop == 'isUpload'">
{{ scope.row[dropCol[index].prop] == "Y" ? "是" : "否" }}
</div>
<div v-else-if="dropCol[index].prop == 'customerOrgParentName'">
{{ scope.row.customerOrgParentName
? scope.row.customerOrgParentName
: scope.row.customerOrgName }}
</div>
<div v-else-if="dropCol[index].prop == 'sexId'">
{{ dddw(dict.sex, "id", scope.row[dropCol[index].prop], "displayName") }}
</div>
<div v-else-if="dropCol[index].prop == 'groupPack'">
<div
v-if="scope.row.medicalPackageId !== dict.personOrgId && scope.row.customerOrgId === dict.personOrgId">
{{ dddw(dict.medicalPackage, "id", scope.row.medicalPackageId, "displayName") }}
</div>
<div
v-if="scope.row.medicalPackageId !== dict.personOrgId && scope.row.customerOrgId !== dict.personOrgId">
{{ dddw(dict.customerOrgGroupAll, "id", scope.row.customerOrgGroupId, "displayName") }}
</div>
</div>
<div v-else-if="dropCol[index].prop == 'nationId'">
{{ dddw(dict.nation, "id", scope.row[dropCol[index].prop], "displayName") }}
</div>
<div v-else-if="dropCol[index].prop == 'birthDate'
|| dropCol[index].prop == 'creationTime'">
{{ scope.row[dropCol[index].prop] ? moment(scope.row[dropCol[index].prop]).format('yyyy-MM-DD') : '' }}
</div>
<div v-else-if="dropCol[index].prop == 'maritalStatusId'">
{{ dddw(dict.maritalStatus, "id", scope.row[dropCol[index].prop], "displayName") }}
</div>
<div v-else-if="dropCol[index].prop == 'medicalTypeId'">
{{ dddw(dict.medicalType, "id", scope.row[dropCol[index].prop], "displayName") }}
</div>
<div v-else-if="dropCol[index].prop == 'personnelTypeId'">
{{ dddw(dict.personnelType, "id", scope.row[dropCol[index].prop], "displayName") }}
</div>
<div v-else>
{{ scope.row[dropCol[index].prop] }}
</div>
</template>
</el-table-column>
<!--
"sexHormoneTermId": "00000000-0000-0000-0000-000000000000",
"interposeMeasure": null,
"medicalConclusionId": "00000000-0000-0000-0000-000000000000",
"reportPrintTimes": 0,
"isMedicalStart": "N",
"medicalStartDate": "6/28/2023",
"isRecoverGuide": "N",
"summaryDate": "",
"summaryDoctor": null,
"isAudit": "N",
"auditDoctor": null,
"auditDate": "",
"isNameHide": "N",
"isPhoneFollow": "N",
"thirdInfo": null,
"guidePrintTimes": null,
"remark": null,
"medicalCenterId": "00000000-0000-0000-0000-000000000000",
"customerOrgRegisterId": "00000000-0000-0000-0000-000000000000",
"lastModifierName": "",
"lastModificationTime": null,
"lastModifierId": null,
"creatorId": null,
"id": "3a0c196d-a6d0-37fe-5c32-4806bdc4530f"
-->
</el-table>
<div style="display: flex;justify-content:space-between;">
<div></div>
<div>
<span style="font-size:12px;">共:{{ loadOpts.totalCount }} 条记录,当前显示:{{ tableData.length }}
条。</span>
</div>
</div>
</div>
<!-- 组合项目 基本信息 -->
<el-tabs v-model="tabChoosed" style="margin-top: -22px;">
<!-- 组合项目 -->
<el-tab-pane label="已选组合项目" name="1">
<PatientRegisterAsbItem />
</el-tab-pane>
</el-tabs>
</div>
<div style="margin-left: 10px;">
<div v-show="checkPagePriv(pagePriv.privs, '人员登记')" class="listBtn">
<el-button type="success" class="commonbutton" @click="btnAdd">人员登记</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '批量正式登记')" class="listBtn">
<el-button type="success" class="commonbutton" @click="btnAddBatch">批量正式登记</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '编辑')" class="listBtn">
<el-button type="primary" class="commonbutton" @click="btnEdit">编辑</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '删除')" class="listBtn">
<el-button type="danger" class="deleteButton" @click="btnDel">删除</el-button>
</div>
<!--
<div class="listBtn">
<el-button
type=""
class="btnClass"
@click="openCamera"
icon="el-icon-camera"
>拍照</el-button
>
</div>
<div class="listBtn">
<el-button type="" class="btnClass commonbutton">健康档案</el-button>
</div>
-->
<div v-show="checkPagePriv(pagePriv.privs, '批量调整分组')" class="listBtn">
<el-button type="" class="commonbutton" @click="btnGroupBatch">批量调整分组</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '批量调整项目')" class="listBtn">
<el-button type="" class="commonbutton" @click="btnAsbBatch">批量调整项目</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '指引单打印')" class="listBtn">
<el-button type="" class="commonbutton" @click="guidePrint('0001', false)">指引单打印</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '指引单预览')" class="listBtn">
<el-button type="" class="commonbutton" @click="guidePrint('0001', true)">指引单预览</el-button>
</div>
<div v-show="checkPagePriv(pagePriv.privs, '人员信息导出')" class="listBtn">
<el-button type="" class="commonbutton" @click="btnExport('info')">人员信息导出</el-button>
</div>
<!-- elProgress.display dialogWin.LocalConfig
<div class="listBtn">
<el-button type="" class="commonbutton" @click="dialogWin.LocalConfig = true">本地设置</el-button>
</div>
-->
<!--
<div class="listBtn">
<el-button type="" class="btnClass commonbutton" @click="rowSelected(tableData)">选中</el-button>
</div>
-->
</div>
</div>
<!--组件弹窗-->
<div>
<!-- 体检人员登记 :title="patientRegister.patientRegisterRd.id ? '体检人员--编辑' : '体检人员--新增'" -->
<el-dialog :title="dataTransOpts.tableS.patient_register.id ? '体检人员--编辑' : '体检人员--新增'"
:visible.sync="dialogWin.PatientRegisterEdit" :close-on-click-modal="false" fullscreen
@close="close_dialogWin_PatientRegisterEdit">
<!-- :formInitData="patientRegister.patientRegisterRd" -->
<PatientRegisterEdit :isDoctor="'1'" :patientRegisterId="patientRegister.patientRegisterRd.id"
:editTimes="editTimes" :refreshRegister="refreshRegister" :refFuncSetData="refFuncSetData" />
</el-dialog>
<!-- 拍照 -->
<el-dialog title="拍照" :visible.sync="patientRegister.cameraVisble" width="400" height="800" :show-close="false"
:append-to-body="true" :close-on-click-modal="false">
<Camera :id="patientRegister.patientRegisterId" />
</el-dialog>
<!-- 批量调整分组 -->
<el-dialog title="批量调整分组" :visible.sync="dialogWin.PatientRegisterEditGroupBatch" width="600px" height="800px"
:append-to-body="true" :close-on-click-modal="false">
<PatientRegisterEditGroupBatch :multipleSelection="multipleSelection" />
</el-dialog>
<!-- 批量调整项目 -->
<el-dialog title="批量调整项目" :visible.sync="dialogWin.PatientRegisterEditItemBatch" width="610px" height="800px"
:append-to-body="true" :close-on-click-modal="false">
<PatientRegisterEditItemBatch :multipleSelection="multipleSelection" />
</el-dialog>
<!-- 通用进度条 -->
<el-dialog title="数据处理中……" :visible.sync="elProgress.display" width="600px" height="400" :show-close="false"
:close-on-click-modal="false" :append-to-body="true">
<ElProgressOCX />
</el-dialog>
<!--通用本地参数设置-->
<el-dialog title="本地参数设置" :visible.sync="dialogWin.LocalConfig" :close-on-click-modal="false" :append-to-body="true"
width="800px" height="600px">
<LocalConfig />
</el-dialog>
</div>
</div>
</template>
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import Sortable from "sortablejs";
import FileSaver from 'file-saver';
import html2canvas from 'html2canvas';
import {
getPagePriv, checkPagePriv,
dddw,
objCopy,
arrayReduce,
arrayExistObj,
deepCopy,
} from "../../utlis/proFunc";
import PatientRegisterEdit from "../../components/patientRegister/PatientRegisterEdit.vue";
import Camera from "../../components/patientRegister/Camera.vue";
import PatientRegisterAsbItem from "../../components/patientRegister/patientRegisterAsbItem.vue";
import ElProgressOCX from "../../components/report/ElProgressOCX.vue";
import PatientRegisterEditGroupBatch from "./PatientRegisterEditGroupBatch.vue";
import PatientRegisterEditItemBatch from "./PatientRegisterEditItemBatch.vue";
import LocalConfig from "../../components/common/LocalConfig.vue";
export default {
components: {
PatientRegisterEdit,
Camera,
PatientRegisterAsbItem,
PatientRegisterEditGroupBatch, //批量调整分组
PatientRegisterEditItemBatch, //批量调整项目
ElProgressOCX,
LocalConfig,
},
data() {
return {
pagePriv: {
routeUrlorPageName: 'patientRegister', //当前页面归属路由或归属页面权限名称
privs: [] // 页面权限
},
peisid: null,
startPoint: -1, // 多选起点 -1 表示选择
endPoint: -1, // 多选终点 -1 表示未选择
tableData: [], //表格数据
tableDataCurrentRow: {}, // 当前被选中的行
multipleSelection: [], //选中的数据列表
dialogCamera: false,
tabChoosed: "1",
formInitData: {}, //体检登记初始表单数据
editTimes: 0,
rClickRow: null, //右击的行
rClickColumn: null, //右击的列(预留)
//动态列
headerCols: [],
//拖动列
dropCol: [
{ label: "序号", prop: "sn", minWidth: 40, align: "center" },
{ label: "体检进度", prop: "completeFlag", minWidth: 80, align: "center" },
{ label: "打印", prop: "guidePrintTimes", minWidth: 55, align: "center" },
{ label: "锁住", prop: "isLock", minWidth: 55, align: "center" },
{ label: "单位", prop: "customerOrgParentName", minWidth: 180, align: "center" },
{ label: "部门", prop: "customerOrgName", minWidth: 120, align: "center" },
{ label: "姓名", prop: "patientName", minWidth: 80, align: "center" },
{ label: "性别", prop: "sexId", minWidth: 55, align: "center" },
{ label: "年龄", prop: "age", minWidth: 55, align: "center" },
{ label: "条码号", prop: "patientRegisterNo", minWidth: 150, align: "center" },
{ label: "档案号", prop: "patientNo", minWidth: 100, align: "center" },
{ label: "体检次数", prop: "medicalTimes", minWidth: 80, align: "center" },
{ label: "分组/套餐", prop: "groupPack", minWidth: 150, align: "center" },
{ label: "民族", prop: "nationId", minWidth: 55, align: "center" },
{ label: "身份证", prop: "idNo", minWidth: 150, align: "center" },
{ label: "出生日期", prop: "birthDate", minWidth: 80, align: "center" },
{ label: "邮箱", prop: "email", minWidth: 150, align: "center" },
{ label: "手机", prop: "mobileTelephone", minWidth: 100, align: "center" },
{ label: "电话", prop: "telephone", minWidth: 100, align: "center" },
{ label: "地址", prop: "address", minWidth: 300, align: "" },
{ label: "体检卡号", prop: "medicalCardNo", minWidth: 80, align: "center" },
{ label: "工卡号", prop: "jobCardNo", minWidth: 80, align: "center" },
{ label: "婚姻状况", prop: "maritalStatusId", minWidth: 80, align: "center" },
{ label: "体检类别", prop: "medicalTypeId", minWidth: 80, align: "center" },
{ label: "人员类别", prop: "personnelTypeId", minWidth: 80, align: "center" },
{ label: "职务", prop: "jobPost", minWidth: 80, align: "center" },
{ label: "职称", prop: "jobTitle", minWidth: 80, align: "center" },
{ label: "介绍人", prop: "salesman", minWidth: 80, align: "center" },
{ label: "是否VIP", prop: "isVip", minWidth: 80, align: "center" },
{ label: "登记人", prop: "creatorName", minWidth: 80, align: "center" },
{ label: "登记日期", prop: "creationTime", minWidth: 80, align: "center" },
{ label: "是否上传", prop: "isUpload", minWidth: 80, align: "center" },
],
dom: null, //用于滚动加载数据
lazyLoading: false, //是否懒加载中
loadOpts: {
totalCount: 0,
skipCount: 0,
maxResultCount: 100,
},
loadOptsInit: {},
};
},
created() {
//获取用户当前页面的权限
let userPriv = window.sessionStorage.getItem('userPriv')
if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))
this.loadOptsInit = Object.assign({}, this.loadOpts)
},
//挂载完成
mounted() {
this.quickAsb = this.dict.asbItemAll;
this.peisid = window.sessionStorage.getItem('peisid');
// 初始化可以拖动的列
this.headerCols = deepCopy(this.dropCol)
this.dropCol = this.columnDrop(this.dropCol);
this.$nextTick(() => {
this.scrollFull()
})
},
computed: {
...mapState([
"window",
"dataTransOpts",
"dialogWin",
"dict",
"elProgress",
"patientRegister",
"customerOrg",
]),
},
methods: {
...mapActions(["getCustomerOrgGroup", "getPatientRegisterAbs"]),
moment, dddw, deepCopy, checkPagePriv,
// 扩展定义表格行样式
handleRowClassName({ row, rowIndex }) {
// highLightBg 为 'selected'的高亮
//// console.log(rowIndex, row)
//return row.highLightBg == 'selected' ? 'high-light-bg' : '';
if (row.choosed) {
return "current-row";
} else {
return "";
}
},
// 行选择
rowSelected(rows) {
rows.forEach((e) => {
this.$refs["info"].toggleRowSelection(e, true);
});
},
// 设置颜色
setColor(isAudit, completeFlag) {
if (isAudit == 'Y') return "#3DC04A"
let color = "#52555F"
switch (completeFlag) {
case '0':
color = "#FF5054"
break;
case '2':
color = "#F68A08"
break;
case '3':
color = "#396FFA"
break;
default:
break;
}
return color
},
refFuncSetData(item, v) {
setData(this, item, v)
},
// 打印指引单(isPreview)
async guidePrint(ReportCode, isPreview) {
if (!this.$peisAPI) {
this.$message.info({ showClose: true, message: "此功能,需要在壳客户端才可运行!" });
return;
}
let token = window.sessionStorage.getItem("token");
let user = window.sessionStorage.getItem("user");
let toOutShell = {
ReportCode,
token,
isBuildImage: 'N',
IsUploadPdf: 'N',
preViewCanPrint: "N",
Parameters: [
{ Name: "printer", Value: user },
{ Name: "hisLog", Value: "pic/hisLog.jpg" },
],
};
let lfind = -1;
//选中(取消勾选)start -------------------------
this.multipleSelection = []
this.tableData.forEach(e => {
if (e.choosed) {
this.multipleSelection.push(deepCopy(e))
}
})
//选中(取消勾选) end  -------------------------
if (this.multipleSelection.length < 1) {
this.$message.info({ showClose: true, message: "请选择要打印指引单的人员记录!" });
return;
}
if (isPreview) {
/*
//this.multipleSelection.forEach((item,index) =>{
postapi(
`/api/app/printreport/getpatientregisterguidereport?PatientRegisterId=${this.multipleSelection[0].id}`
)
.then((res) => {
if (res.code != -1) {
toOutShell.ReportTable = res.data;
// console.log(
"JSON.stringify(toOutShell)",
JSON.stringify(toOutShell)
);
return this.$peisAPI.printPre(JSON.stringify(toOutShell));
}
})
.then(res => {
// console.log('this.$peisAPI.printPre', res)
if (JSON.parse(res).code < 0) {
this.$message.warning(JSON.parse(res).message);
}
})
.catch((err) => {
// console.log('打印指引单', err)
this.$message.warning({ showClose: true, message: err });
});
*/
toOutShell.BusinessCode = this.multipleSelection[0].id
this.$peisAPI.printPre(JSON.stringify(toOutShell))
.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 {
this.elProgress.display = true;
this.elProgress.percentage = 0;
for (let i = 0; i < this.multipleSelection.length; i++) {
try {
/*
resPrintData = await postapi(`/api/app/printreport/getpatientregisterguidereport?PatientRegisterId=${this.multipleSelection[i].id}`)
if (resPrintData.code == -1) continue
toOutShell.ReportTable = resPrintData.data
resPeisAPI = await this.$peisAPI.print(JSON.stringify(toOutShell));
// console.log('壳返回结果', resPeisAPI)
if (JSON.parse(resPeisAPI).code < 0) continue
resPrintTimes = await postapi("/api/app/patientregister/updatepatientregisterguideprinttimesmany", [this.multipleSelection[i].id]);
if (resPrintTimes.code == -1) continue
lfind = arrayExistObj(this.tableData, "id", this.multipleSelection[i].id);
if (lfind > -1) {
if (this.tableData[lfind].guidePrintTimes) {
this.tableData[lfind].guidePrintTimes = Number(this.tableData[lfind].guidePrintTimes) + 1;
} else {
this.tableData[lfind].guidePrintTimes = 1;
}
}
*/
let patientregisterId = this.multipleSelection[i].id
toOutShell.BusinessCode = patientregisterId
let resPeisAPI = await this.$peisAPI.print(JSON.stringify(toOutShell));
if (JSON.parse(resPeisAPI).code < 0) continue
let resPrintTimes = await postapi("/api/app/patientregister/updatepatientregisterguideprinttimesmany", [patientregisterId]);
if (resPrintTimes.code == -1) continue
lfind = arrayExistObj(this.tableData, "id", patientregisterId);
if (lfind > -1) {
if (this.tableData[lfind].guidePrintTimes) {
this.tableData[lfind].guidePrintTimes = Number(this.tableData[lfind].guidePrintTimes) + 1;
} else {
this.tableData[lfind].guidePrintTimes = 1;
}
}
} catch (error) {
// console.log('打印指引单', error)
this.$message.warning({ showClose: true, message: `${error}` });
}
this.elProgress.percentage = Math.floor(
((i + 1) * 100) / this.multipleSelection.length
);
}
this.elProgress.display = false;
}
},
handleSelectionChange(rows) {
//this.multipleSelection = rows;
//// console.log('this.multipleSelection',this.multipleSelection)
rows.forEach((item) => {
item.highLightBg = "selected";
});
// 取消全选
if (!rows.length) {
this.tableData.forEach((item) => {
item.highLightBg = "";
});
}
this.multipleSelection = JSON.parse(JSON.stringify(rows));
},
//设置新增/编辑的form数据
setForm(formData) {
this.patientRegister.patientRegisterRd = deepCopy(formData)
if (!this.patientRegister.patientRegisterRd.id) {
this.patientRegister.patientRegisterRd.customerOrgId = this.patientRegister.query.customerOrgId
}
},
//点击体检次数行
rowClick(row) {
// 按住了shift键
if (this.window.shift) {
//清除所有选择
this.tableData.forEach((e, index) => {
e.choosed = false;
e.index = index;
});
if (this.startPoint == -1) {
this.tableData[row.index].choosed = true;
this.startPoint = row.index;
} else {
if (this.startPoint > row.index) {
for (let i = row.index; i <= this.startPoint; i++) {
this.tableData[i].choosed = true;
}
} else if (this.startPoint <= row.index) {
for (let i = this.startPoint; i <= row.index; i++) {
this.tableData[i].choosed = true;
}
}
}
} else if (this.window.ctrl) { // 按住了ctrl 键
this.tableData[row.index].choosed = true;
if (this.startPoint == -1) {
this.startPoint = row.index;
}
} else {
// 未按住了ctrl 、shift 键
//清除所有选择
// console.log("清除所有选择");
this.tableData.forEach((e, index) => {
e.choosed = false;
e.index = index;
});
// console.log(this.tableData, row.index);
// console.log(this.tableData[row.index].choosed);
this.tableData[row.index].choosed = true;
this.startPoint = row.index;
}
//选中了多个点编辑时,排序最前的作为当前选中的
// console.log('row.index <= this.startPoint', row.index, this.startPoint)
let lfind = -1
for (let i = 0; i < this.tableData.length; i++) {
if (this.tableData[i].choosed) {
lfind = i
break
}
}
if (lfind > -1) {
// 弹出编辑框,只有在编辑框显示时,才去触发获取数据
this.dataTransOpts.tableS.patient_register.id = this.tableData[lfind].id
this.tableDataCurrentRow = deepCopy(this.tableData[lfind])
this.dataTransOpts.refresh.register_check_asbitem.M++ //触发所选组合项目刷新
}
},
//体检次数 相关操作
btnAdd() {
if (!this.peisid || this.peisid == 'null') {
this.$message.warning({ showClose: true, message: "该用户未选归属体检中心,不能执行此操作!" });
return
}
let customerOrgId = this.patientRegister.query.customerOrgId;
if (!customerOrgId) {
this.$message.warning({ showClose: true, message: "请选择单位或个人" });
return;
}
// this.patientRegister.patientRegisterRdInit.customerOrgId = customerOrgId
// this.setForm(this.patientRegister.patientRegisterRdInit)
// this.patientRegister.patientRegisterAbs = [];
// this.patientRegister.patientRegisterRd.id = ''
// this.dialogWin.PatientRegisterEdit = true;
// this.editTimes++; //触发表单窗口,数据更新
// this.getPatientRegisterAbs();
this.dataTransOpts.tableS.patient_register.id = ''
this.dialogWin.PatientRegisterEdit = true;
this.dataTransOpts.plus.clearPatientRegisterQuery++ //触发清空人员登记界面的查询条件
setTimeout(() => {
this.dataTransOpts.refresh.patient_register.S++ //触发人员信息刷新
}, 10);
},
//刷新或添加列表数据
refreshRegister(patientRegister) {
// console.log('编辑/新增的 form :', patientRegister)
},
//批量正式登记
btnAddBatch() {
let patientRegisterIds = []
//取消勾选,换成选择的方式 start
this.multipleSelection = [];
this.tableData.forEach((e) => {
if (e.choosed && e.completeFlag == '0') {
this.multipleSelection.push(e);
patientRegisterIds.push(e.id)
}
});
//取消勾选,换成选择的方式 end
if (patientRegisterIds.length < 1) {
this.$message.info({ showClose: true, message: "请选择状态为预登记的记录!" });
return;
}
let completeFlag = '1'
let body = { completeFlag, patientRegisterIds }
postapi('/api/app/patientregister/updatepatientregistercompleteflagormedicalstartdate', body)
.then(res => {
if (res.code != -1) {
// console.log('操作成功!')
patientRegisterIds.forEach(e => {
let lfind = arrayExistObj(this.tableData, 'id', e)
if (lfind > -1) this.tableData[lfind].completeFlag = completeFlag
});
}
})
.catch(err => {
this.$message.error({ showClose: true, message: `操作失败 ${err}` });
});
},
// 单个编辑
btnEdit() {
// if (!this.patientRegister.patientRegisterRd.id) {
if (!this.dataTransOpts.tableS.patient_register.id) {
this.$message.warning({ showClose: true, message: "请选择要操作的记录" });
return;
}
//// console.log(this.patientRegister.patientRegisterRd,this.tableData)
// 触发数据刷新
this.dataTransOpts.refresh.patient_register.S++ //触发人员信息刷新(会同时刷新组合项目)
this.dataTransOpts.plus.clearPatientRegisterQuery++ //触发清空人员登记界面的查询条件
this.dialogWin.PatientRegisterEdit = true;
},
//新增或编辑后选中记录
async close_dialogWin_PatientRegisterEdit() {
// 如果 dataTransOpts.tableS.patient_register.id 为空(未增加),则不做处理
let id = this.dataTransOpts.tableS.patient_register.id
if (!id) {
id = this.tableDataCurrentRow.id
}
if (!id) return
this.dataTransOpts.tableS.patient_register.id = id
let res = await postapi('/api/app/patientregister/getinfoorpatient', { patientRegisterId: this.dataTransOpts.tableS.patient_register.id })
if (res.code != 1) return
let currentRow = res.data
// this.tableData.forEach(e => {
// e.choosed = false
// });
let lfind = arrayExistObj(this.tableData, 'id', this.dataTransOpts.tableS.patient_register.id)
if (lfind > -1) {
objCopy(currentRow, this.tableData[lfind])
} else {
lfind = this.tableData.length
currentRow.index = lfind
currentRow.choosed = true
this.tableData.push(currentRow)
}
// 刷新 register_check_asbitem 表记录
if (lfind > -1) {
this.dataTransOpts.refresh.register_check_asbitem.M++
}
},
//拍照
openCamera() {
if (!this.patientRegister.patientRegisterId) {
this.$message.warning({ showClose: true, message: "请选择要操作的记录" });
return;
}
this.patientRegister.cameraVisble = true;
},
//删除(可批量删除)
// /api/app/patient-register/many?PatientRegisterIds=3a0c2cac-f44c-f407-9504-c1fc5e80a159&PatientRegisterIds=3a0c2cb3-d10c-ed70-db6a-b835e75ce641
btnDel() {
//选中(取消勾选)start -------------------------
this.multipleSelection = []
this.tableData.forEach(e => {
if (e.choosed) {
this.multipleSelection.push(deepCopy(e))
}
})
//选中(取消勾选) end -------------------------
if (this.multipleSelection.length < 1) {
this.$message.warning({ showClose: true, message: "请先勾选要操作的记录" });
return;
}
let patientRegisterIds = [];
for (let i = 0; i < this.multipleSelection.length; i++) {
patientRegisterIds.push(this.multipleSelection[i]["id"]);
}
this.$confirm("此操作将永久删除该记录, 是否继续?", "提示", {
confirmButtonText: "是",
cancelButtonText: "否",
type: "warning",
})
.then(() => {
//// console.log('{patientRegisterIds}',{patientRegisterIds})
return postapi(`/ api / app / patient - register / delete -many`, {
patientRegisterIds,
});
})
.then((res) => {
if (res.code != -1) {
// console.log("操作成功");
this.dataTransOpts.tableS.patient_register.id = ''
setTimeout(() => {
this.dataTransOpts.refresh.register_check_asbitem.M++
}, 10);
arrayReduce(this.tableData, this.multipleSelection, 'id=id') //清除列表记录
// this.setForm(this.patientRegister.patientRegisterRdInit)
// this.getPatientRegisterAbs();
}
})
.catch((err) => {
if (err == "cancel") {
this.$message.info({ showClose: true, message: "已取消操作" });
}
});
},
//查询
async Query() {
// 查询时,清掉明细数据 (滚动时不清)
this.dataTransOpts.tableS.patient_register.id = ''
this.tableDataCurrentRow = {} // 清除选择
this.tableData = []
setTimeout(() => {
this.dataTransOpts.refresh.register_check_asbitem.M++ //触发所选组合项目刷新
}, 10);
this.loadOpts = Object.assign(this.loadOpts, this.loadOptsInit)
await this.getPrList()
},
//数据量多时,滚动加载
async load() {
this.loadOpts.skipCount++
await this.getPrList()
},
// 获取列表数据
async getPrList() {
if (this.loadOpts.skipCount != 0 && this.loadOpts.skipCount * this.loadOpts.maxResultCount >= this.loadOpts.totalCount) return
// console.log('getPrList', this.loadOpts)
let body = {
skipCount: this.loadOpts.skipCount,
maxResultCount: this.loadOpts.maxResultCount
};
// console.log(`this.patientRegister.query`, this.patientRegister.query);
if (this.patientRegister.query.customerOrgFlag) {
// if (this.patientRegister.query.CustomerOrgParentId) {
// body.customerOrgId = this.patientRegister.query.CustomerOrgParentId;
// } else {
// if (this.patientRegister.query.customerOrgId)
// body.customerOrgId = this.patientRegister.query.customerOrgId;
// }
if (this.patientRegister.query.customerOrgId) body.customerOrgId = this.patientRegister.query.customerOrgId;
if (this.patientRegister.query.customerOrgId
&& this.patientRegister.query.customerOrgId != this.dict.personOrgId
&& this.patientRegister.query.customerOrgRegister.id) {
body.customerOrgRegisterId = this.patientRegister.query.customerOrgRegister.id
}
}
if (this.patientRegister.query.sex)
body.sexId = this.patientRegister.query.sex;
if (this.patientRegister.query.patientName)
body.patientName = this.patientRegister.query.patientName;
if (this.patientRegister.query.completeFlag)
body.completeFlag = this.patientRegister.query.completeFlag;
//StartDate EndDate
if (
this.patientRegister.query.startDate &&
this.patientRegister.query.endDate
) {
body.startDate = moment(this.patientRegister.query.startDate).format(
"yyyy-MM-DD"
);
body.endDate = moment(this.patientRegister.query.endDate).format(
"yyyy-MM-DD"
);
if (body.startDate > body.endDate) {
this.$message.warning({ showClose: true, message: "起始日期不能大于截止日期,数据校验不通过!" });
return;
}
}
if (this.patientRegister.query.phone)
body.phone = this.patientRegister.query.phone;
if (this.patientRegister.query.idCardNo)
body = { idNo: this.patientRegister.query.idCardNo };
if (this.patientRegister.query.patientNo)
body = { patientNo: this.patientRegister.query.patientNo };
if (this.patientRegister.query.patientRegisterNo)
body = {
patientRegisterNo: this.patientRegister.query.patientRegisterNo,
};
// console.log("/api/app/patientregister/getlistinfilter", body);
postapi("/api/app/patientregister/getlistinfilter", body)
.then(res => {
if (res.code > -1) {
// 刷新最大记录数
this.loadOpts.totalCount = res.data.totalCount
let curLoad = res.data.items
let oldCount = 0
if (body.skipCount == 0) { //查询
this.tableData = [];
} else {
// 懒加载 ,原数据集不用清空
oldCount = this.tableData.length
}
curLoad.forEach((e, index) => {
this.tableData.push(Object.assign({ index: Number(oldCount) + Number(index), choosed: false }, e))
})
//如果 有选中 记录,则刷新其对应的组合项目
if (this.dataTransOpts.tableS.patient_register.id) {
this.dataTransOpts.refresh.register_check_asbitem.M++
}
}
})
},
//滚动加载数据
scrollFull() {
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) + 1) * 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
}
}
})
},
//右击菜单
onCellRightClick(row, column) {
this.rClickRow = { ...row }; //右击的行记录
this.rClickColumn = { ...column }; //右击的列(预留)
// console.log(row, column.property);
},
onContextmenu(event) {
//// console.log('onContextmenu',event);
if (!this.rClickRow) return false;
let row = { ...this.rClickRow };
let items = [] //菜单项
if (checkPagePriv(this.pagePriv.privs, '发送检验申请') && row.completeFlag != '0')
items.push({
label: "发送检验申请",
onClick: () => {
this.lisRequest(row.id);
},
})
if (checkPagePriv(this.pagePriv.privs, '预览检验条码') && row.completeFlag != '0')
items.push({
label: "预览检验条码",
onClick: () => {
this.lisPrint(row.id, "0002", true);
},
})
if (checkPagePriv(this.pagePriv.privs, '打印检验条码') && row.completeFlag != '0')
items.push({
label: "打印检验条码",
onClick: () => {
this.lisPrint(row.id, "0002", false);
},
})
if (checkPagePriv(this.pagePriv.privs, '预览Pacs条码') && row.completeFlag != '0')
items.push({
label: "预览Pacs条码",
onClick: () => {
this.pacsPrint(row.id, "0004", true);
},
})
if (checkPagePriv(this.pagePriv.privs, '打印Pacs条码') && row.completeFlag != '0')
items.push({
label: "打印Pacs条码",
onClick: () => {
this.pacsPrint(row.id, "0004", false);
},
})
items.push({ label: "----------------", })
this.$contextmenu({
items,
event,
//x: event.clientX,
//y: event.clientY,
customClass: "custom-class",
zIndex: 3,
minWidth: 80,
});
this.rClickRow = null;
return false;
},
//批量更新分组按钮
btnGroupBatch() {
let customerOrgId = this.patientRegister.query.customerOrgId;
if (!customerOrgId) {
this.$message.warning({ showClose: true, message: "请选择单位" });
return;
}
//取消勾选,换成选择的方式 start
this.multipleSelection = [];
this.tableData.forEach((e) => {
if (e.choosed) this.multipleSelection.push(e);
});
//取消勾选,换成选择的方式 end
if (this.multipleSelection.length < 1) {
this.$message.info({ showClose: true, message: "请选择要操作的记录!" });
return;
}
this.dataTransOpts.plus.PatientRegisterEditGroupBatch++
this.dialogWin.PatientRegisterEditGroupBatch = true;
},
//批量更新项目
btnAsbBatch() {
let customerOrgId = this.patientRegister.query.customerOrgId;
if (!customerOrgId) {
this.$message.warning({ showClose: true, message: "请选择单位" });
return;
}
//取消勾选,换成选择的方式 start
this.multipleSelection = [];
this.tableData.forEach((e) => {
if (e.choosed) this.multipleSelection.push(e);
});
//取消勾选,换成选择的方式 end
if (this.multipleSelection.length < 1) {
this.$message.warning({ showClose: true, message: "请选择要操作的记录" })
return
}
this.dataTransOpts.plus.PatientRegisterEditItemBatch++ //如果放在弹窗显示后面,在首次加载子组件时,会触发两次数据处理
this.dialogWin.PatientRegisterEditItemBatch = true;
},
//检验申请
async lisRequest(prId) {
let isPrintLisRequest = false;
let res = null;
if (prId.length < 1) {
this.$message.info({ showClose: true, message: "人员信息尚未保存,不可执行此操作!" });
return;
}
try {
res = await postapi(`/ api / app / lisrequest / setlisrequest ? PatientRegisterId = ${ prId }`);
// console.log(`/ api / app / lisrequest / setlisrequest ? PatientRegisterId = ${ prId }`,res);
} catch (error) {
return;
}
if (res.code > -1) {
isPrintLisRequest = true;
}
//重复申请,重打
if (res.code == -1 && res.message.indexOf("已申请") > -1) {
isPrintLisRequest = true;
}
if (!isPrintLisRequest) return;
try {
await this.$confirm("是否打印检验申请单?", "提示", {
confirmButtonText: "是",
cancelButtonText: "否",
type: "info",
showClose: false,
closeOnClickModal: false,
closeOnPressEscape: false,
});
} catch (error) {
return;
}
//打印检验申请单
this.lisPrint(prId, "0003", false);
},
//检验条码打印
lisPrint(prId, ReportCode, isPreview) {
if (!this.$peisAPI) {
this.$message.info({ showClose: true, message: "此功能,需要在壳客户端才可运行!" });
return;
}
let token = window.sessionStorage.getItem("token");
let user = window.sessionStorage.getItem("user");
let toOutShell = {
ReportCode,
token,
IsMoreLabel: 'Y',
isBuildImage: 'N',
IsUploadPdf: 'N',
preViewCanPrint: "N",
Parameters: [
{ Name: "printer", Value: user },
{ Name: "hisLog", Value: "pic/hisLog.jpg" },
],
BusinessCode: prId
};
// console.log('this.$peisAPI.print', toOutShell)
if (isPreview) {
/*
postapi(
`/ api / app / printreport / getlisrequestreport ? PatientRegisterId = ${ prId }`
)
.then((res) => {
if (res.code != -1) {
toOutShell.ReportTable = { lisRequest: res.data };
// console.log(
"JSON.stringify(toOutShell)",
JSON.stringify(toOutShell)
);
return this.$peisAPI.printPre(JSON.stringify(toOutShell));
}
})
.catch((err) => {
this.$message.warning(err);
});
*/
this.$peisAPI.printPre(JSON.stringify(toOutShell))
.then(res => {
// console.log('this.$peisAPI.printPre', 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 {
/*
postapi(
`/ api / app / printreport / getlisrequestreport ? PatientRegisterId = ${ prId }`
)
.then((res) => {
if (res.code != -1) {
toOutShell.ReportTable = { lisRequest: res.data };
// console.log(
"JSON.stringify(toOutShell)",
JSON.stringify(toOutShell)
);
return this.$peisAPI.print(JSON.stringify(toOutShell));
}
})
.then((res) => {
//// console.log("res", res);
if (JSON.parse(res).code >= 0) {
//更新打印状态 /api/app/lisrequest/updatelisrequestisprint
// {
// "operateType": 0, 操作类型(1.按PatientRegisterId 2.按LisRequestId)
// "patientRegisterId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
// "lisRequestId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
// }
return postapi("/api/app/lisrequest/updatelisrequestisprint", {
operateType: 1,
patientRegisterId: prId,
});
}
})
.catch((err) => {
this.$message.warning(err);
});
*/
this.$peisAPI.print(JSON.stringify(toOutShell))
.then(res => {
if (JSON.parse(res).code < 0) {
this.$message.warning({ showClose: true, message: JSON.parse(res).message });
} else {
return postapi("/api/app/lisrequest/updatelisrequestisprint", {
operateType: 1,
patientRegisterId: prId,
});
}
})
.then(res => {
if (res && res.code < 0) {
this.$message.error({ showClose: true, message: `${ res.message }` });
}
})
.catch((err) => {
// console.log('打印检验条码错误', err)
this.$message.error({ showClose: true, message: `${ err }` });
});
}
},
//pacs条码打印
pacsPrint(prId, ReportCode, isPreview) {
if (!this.$peisAPI) {
this.$message.info({ showClose: true, message: "此功能,需要在壳客户端才可运行!" });
return;
}
let token = window.sessionStorage.getItem("token");
let user = window.sessionStorage.getItem("user");
let toOutShell = {
ReportCode,
token,
isBuildImage: 'N',
IsUploadPdf: 'N',
preViewCanPrint: "N",
Parameters: [
{ Name: "printer", Value: user },
{ Name: "hisLog", Value: "pic/hisLog.jpg" },
],
BusinessCode: prId
};
if (isPreview) {
/*
postapi(
`/ api / app / printreport / getpacsnoreport ? PatientRegisterId = ${ prId }`
)
.then((res) => {
if (res.code != -1) {
toOutShell.ReportTable = { lisRequest: res.data };
// console.log(
"JSON.stringify(toOutShell)",
JSON.stringify(toOutShell)
);
return this.$peisAPI.printPre(JSON.stringify(toOutShell));
}
})
.catch((err) => {
this.$message.warning(err);
});
*/
this.$peisAPI.printPre(JSON.stringify(toOutShell))
.then(res => {
if (JSON.parse(res).code < 0) {
this.$message.warning({ showClose: true, message: JSON.parse(res).message });
}
})
.catch((err) => {
// console.log('打印pacs条码错误', err)
this.$message.warning({ showClose: true, message: `${ err }` });
});
} else {
/*
postapi(
`/ api / app / printreport / getpacsnoreport ? PatientRegisterId = ${ prId }`
)
.then((res) => {
if (res.code != -1) {
toOutShell.ReportTable = { lisRequest: res.data };
// console.log(
"JSON.stringify(toOutShell)",
JSON.stringify(toOutShell)
);
return this.$peisAPI.print(JSON.stringify(toOutShell));
}
})
.then((res) => {
if (JSON.parse(res).code >= 0) {
//更新打印状态 /api/app/lisrequest/updatelisrequestisprint
// {
// "operateType": 0, 操作类型(1.按PatientRegisterId 2.按LisRequestId)
// "patientRegisterId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
// "lisRequestId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
// }
return postapi("/api/app/lisrequest/updatelisrequestisprint", {
operateType: 1,
patientRegisterId: prId,
});
}
})
.catch((err) => {
this.$message.warning(err);
});
*/
this.$peisAPI.print(JSON.stringify(toOutShell))
.then(res => {
if (JSON.parse(res).code < 0) {
this.$message.warning({ showClose: true, message: JSON.parse(res).message });
} else {
return postapi("/api/app/lisrequest/updatelisrequestisprint", {
operateType: 1,
patientRegisterId: prId,
});
}
})
.then(res => {
if (res && res.code < 0) {
this.$message.error({ showClose: true, message: `${ res.message }` });
}
})
.catch((err) => {
// console.log('打印pacs条码错误', err)
this.$message.error({ showClose: true, message: `${ err }` });
});
}
},
columnDrop(dropCol) {
//获取dom节点
const wrapperTr = document.querySelector(".el-table__header-wrapper tr");
Sortable.create(wrapperTr, {
animation: 180,
delay: 0,
// 元素被选中
onChoose: function (/**Event*/ evt) {
//// console.log('onChoose',evt,evt.oldIndex)
evt.oldIndex; // element index within parent
},
// 元素未被选中的时候(从选中到未选中)
onUnchoose: function (/**Event*/ evt) {
// same properties as onEnd
},
// 开始拖拽的时候
onStart: function (/**Event*/ evt) {
//// console.log('onStart',evt,evt.oldIndex)
evt.oldIndex; // element index within parent
},
onEnd: (evt) => {
const oldItem = dropCol[evt.oldIndex]; // dropCol[evt.oldIndex - 1];
if (oldItem) {
dropCol.splice(evt.oldIndex, 1);
dropCol.splice(evt.newIndex, 0, oldItem);
}
//// console.log(this.headerCols, oldItem, dropCol);
},
});
return dropCol;
},
//通用导出
btnExport(elId) {
// 获取HTML元素(表格)
// let table = document.getElementById(elId); //.cloneNode(true)
this.$nextTick(() => {
let refsTable = this.$refs[elId] //.cloneNode(true) true
let table = document.getElementById(elId)
// console.log('table,refsTable', table, refsTable)
let tableData = table.innerHTML
let fileName = moment(new Date()).format('yyyyMMDDHHmmss')
let blob = new Blob([tableData], { type: "text/plain;charset=utf-8" });
FileSaver.saveAs(blob, fileName + '.xls');
// 导出图片
// 使用html2canvas将HTML元素转换为画布
// let cloneTable = table.cloneNode(true) //[elId]
html2canvas(table).then(canvas => {
// 创建一个a元素用于下载
const link = document.createElement('a');
link.href = canvas.toDataURL('image/jpeg');
link.download = fileName + '.jpg';
document.body.appendChild(link);
link.click();
//document.body.removeChild(link);
// // 创建一个PDF对象
// var pdf = new jsPDF();
// // 设置PDF的尺寸
// pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, canvas.width, canvas.height);
// // 导出PDF
// pdf.save('员工信息表.pdf');
});
})
},
},
//监听事件
watch: {
"patientRegister.query.customerOrgId": {
// immediate: true, // 立即执行
// deep: true, // 深度监听复杂类型内变化
handler(newVal, oldVal) {
//// console.log('watch:patientRegister.query.customerOrgId:',newVal,oldVal)
// 单位变化时,清除当前列表信息
if (newVal && newVal != oldVal) {
this.tableData = []
this.dataTransOpts.tableM.register_check_asbitem = []
}
}
},
//触发查询事件
"patientRegister.query.times"(newVal, oldVal) {
if (newVal != oldVal) {
//alert('触发查询事件')
this.Query();
}
},
//新增后,触发赋值
// "patientRegister.patientRegisterRd.id"(newVal, oldVal) {
// if (newVal != oldVal) {
// //// console.log('patientRegister.patientRegisterRd.customerOrgId',this.patientRegister.patientRegisterRd.customerOrgId)
// objCopy(this.patientRegister.patientRegisterRd, this.form);
// }
// },
},
};
</script>
<style scoped>
@import "../../assets/css/global_input.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global.css";
.box {
display: flex;
}
.listBtn {
margin-top: 5px;
text-align: center;
}
.btnClass {
width: 100px;
}
</style>