|
|
<template> <div> <!-- 查询条件 --> <div :style="`display: flex; flex-wrap: wrap; width: 100%;height:${divHeight}px;`"> <div v-if="winAbsolute" style="position: absolute;top:3px;right:0px;"> <el-tooltip content="关闭人员列表窗口" placement="bottom" effect="light"> <i class="el-icon-close" @click="doctorCheck.doctorCheckDialogVisible = false; sumDoctorCheck.sumDoctorCheckDialogVisible = false;" style="font-size: 24px;color: red;cursor:pointer;"></i> </el-tooltip> </div> <div class="query" style="display: flex;padding-top: 2px;"> <el-input placeholder="请选择体检单位" v-model="patientRegister.query.cusOrgOCX" style="width:238px;" size="small" disabled> </el-input> <el-button icon="el-icon-search" @click="report.dialogCusOrgOCX = true" style="font-size: 20px;height:30px;min-width:30px; padding: 5px 5px;" size="small"></el-button> </div>
<div class="query"> <span>姓名:</span> <el-input placeholder="姓名" v-model="local.query.patientName" size="small" clearable style="width: 110px" /> </div> <div class="query"> <span>性别:</span> <el-select v-model="local.query.sex" placeholder="请选择" clearable style="width: 80px" size="small"> <el-option v-for="item in dict.forSex" :key="item.id" :label="item.displayName" :value="item.id"> </el-option> </el-select> </div> <div class="query"> <span>人员状态:</span> <el-select v-model="local.query.completeFlag" placeholder="请选择" clearable style="width: 80px" size="small"> <el-option v-for="item in local.completeFlag" :key="item.id" :label="item.displayName" :value="item.id"> </el-option> </el-select> <el-select v-model="local.query.isAudit" placeholder="请选择" clearable style="width: 75px;margin: 0 2px;" size="small"> <el-option label="未审核" value="N" /> <el-option label="已审核" value="Y" /> </el-select> <el-checkbox v-if="win == 'doctorCheck'" v-model="local.query.haveImage">有图</el-checkbox> </div> <div class="query" v-if="win == 'doctorCheck'"> <span>组合项目:</span> <el-select v-model="local.query.checkAsb" placeholder="快速选择组合项目" size="small" filterable :filter-method="filterMethod" clearable @clear="quickAsb = deepCopy(asbItemQuick)" default-first-option ref="quickAsbOCX" style="width:207px;text-align: left;"> <el-option v-for="item in quickAsb" :key="item.id" :value="item.id" :label="item.displayName" /> </el-select> </div> <div class="query" v-if="win == 'doctorCheck'"> <span>检查状态:</span> <el-select v-model="local.query.checkCompleteFlag" placeholder="请选择" clearable style="width: 80px" size="small"> <el-option v-for="item in dict.checkCompleteFlag" :key="item.id" :label="item.displayName" :value="item.id"> </el-option> </el-select> <el-select v-model="local.query.isAuditCheck" placeholder="请选择" clearable style="width: 75px;margin: 0 2px;" size="small"> <el-option label="未审核" value="N" /> <el-option label="已审核" value="Y" /> </el-select> </div> <div class="query"> <el-button class="commonbutton" type="primary" @click="query" size="small" style="width:50px;height:26px;margin: 2px 0 2px -3px;">查询</el-button> </div> </div>
<!-- 人员列表 --> <el-table :data="dataList" border width="100%" :height="tableHeight" row-key="id" size="small" highlight-current-row @row-click="rowClick" @row-dblclick="rowDblclick" ref="info" id="info" style="border-radius:10px;"> <el-table-column prop="customerOrgParentName" label="单位" width="120" sortable> <template slot-scope="scope"> <div>{{ scope.row.customerOrgParentName ? scope.row.customerOrgParentName : scope.row.customerOrgName }}</div> </template> </el-table-column> <el-table-column prop="customerOrgName" label="部门" width="100" sortable> <template slot-scope="scope"> <div>{{ scope.row.customerOrgParentName ? scope.row.customerOrgName : "" }}</div> </template> </el-table-column> <el-table-column prop="patientName" label="姓名" width="80" sortable align="center"/> <el-table-column prop="sexId" label="性别" sortable align="center"> <template slot-scope="scope"> <div>{{ dddw(dict.sex, "id", scope.row.sexId, "displayName") }}</div> </template> </el-table-column> <el-table-column prop="age" label="年龄" align="center"/> <el-table-column prop="patientRegisterNo" label="条码号" width="150" sortable align="center"/> <el-table-column prop="patientNo" label="档案号" sortable align="center"/> <el-table-column prop="medicalTimes" label="体检次数" align="center" /> <el-table-column label="分组/套餐" width="150"> <template slot-scope="scope"> <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> </template> </el-table-column> <el-table-column prop="nationId" label="民族" sortable align="center" > <template slot-scope="scope"> <div> {{ dddw(dict.nation, "id", scope.row.nationId, "displayName") }} </div> </template> </el-table-column> <el-table-column prop="idNo" label="身份证" sortable width="180" align="center" /> <el-table-column prop="birthDate" label="出生日期" align="center" width="100" > <template slot-scope="scope"> <div v-if="scope.row.birthDate"> {{ lmoment(scope.row.birthDate, "yyyy-MM-DD") }} </div> </template> </el-table-column> <el-table-column prop="email" label="邮箱" width="150"/> <el-table-column prop="mobileTelephone" label="手机" width="130"/> <el-table-column prop="telephone" label="电话" width="130"/> <el-table-column prop="address" label="地址" width="400"/> <el-table-column prop="medicalCardNo" label="体检卡号" /> <el-table-column prop="jobCardNo" label="工卡号" /> <el-table-column prop="maritalStatusId" label="婚姻状况" align="center"> <template slot-scope="scope"> <div> {{ dddw(dict.maritalStatus, "id", scope.row.maritalStatusId, "displayName") }} </div> </template> </el-table-column> <el-table-column prop="medicalTypeId" label="体检类别" sortable> <template slot-scope="scope"> <div v-if="scope.row.medicalTypeId !== dict.personOrgId"> {{ dddw(dict.medicalType, "id", scope.row.medicalTypeId, "displayName") }} </div> </template> </el-table-column> <el-table-column prop="personnelTypeId" label="人员类别" sortable> <template slot-scope="scope"> <div v-if="scope.row.personnelTypeId !== dict.personOrgId"> {{ dddw(dict.personnelType, "id", scope.row.personnelTypeId, "displayName") }} </div> </template> </el-table-column> <el-table-column prop="jobPost" label="职务" width="200"/> <el-table-column prop="jobTitle" label="职称" /> <el-table-column prop="salesman" label="介绍人" /> <el-table-column prop="isVip" label="是否VIP" align="center"> <template slot-scope="scope"> <div>{{ scope.row.isVip == "Y" ? "是" : "否" }}</div> </template> </el-table-column> <el-table-column prop="creatorName" label="登记人" /> <el-table-column prop="creationTime" label="登记日期" width="100" align="center"> <template slot-scope="scope"> <div>{{ lmoment(scope.row.creationTime, "yyyy-MM-DD") }}</div> </template> </el-table-column> <el-table-column prop="isUpload" label="是否上传"> <template slot-scope="scope"> <div>{{ scope.row.isUpload == "Y" ? "是" : "否" }}</div> </template> </el-table-column> <el-table-column prop="completeFlag" label="体检进度"> <template slot-scope="scope"> <div>{{ dddw(dict.completeFlag, "id", scope.row.completeFlag, "displayName") }}</div> </template> </el-table-column> <el-table-column prop="isLock" label="锁住"> <template slot-scope="scope"> <div>{{ scope.row.isLock == "Y" ? "是" : "否" }}</div> </template> </el-table-column> </el-table> <div style="display: flex;justify-content:space-between;"> <div></div> <div> <span style="font-size:12px;">共:{{ loadOpts.totalCount }} 条记录,当前显示:{{ dataList.length }} 条。</span> </div> </div>
<!--通用选单位、体检次数、分组的控件--> <el-dialog title="体检单位选择" :visible.sync="report.dialogCusOrgOCX" :close-on-click-modal="false" :append-to-body="true" width="880px" height="600px"> <CusOrgOCX :useCustomerOrg="false" :initDateType="'medicalStartDate'" /> </el-dialog>
</div></template><script>import moment from "moment";import { mapState, mapMutations } from "vuex";import { getapi, postapi, putapi, deletapi } from "@/api/api";import { dddw, objCopy, arrayReduce, deepCopy } from "../../utlis/proFunc"
import CusOrgOCX from "../../components/report/CusOrgOCX.vue"
export default { components: { CusOrgOCX, }, props: ['win', 'winAbsolute'], data() { return { dataList: [], //列表数据
multipleSelection: [], //选中的数据列表
dialogVisible: false, dialogCamera: false,
local: { query: { dateType: 'creationTime', //登记日期
dateRange: null, //日期范围
startDate: null, endDate: null, containRefuse: true, //包含弃检项目
times: 0, //触发查询次数
customerOrgId: "", //体检单位ID
CustomerOrgParentId: "", //单位父级ID
customerOrgFlag: true, //单位作为查询条件
customerOrgRegister: { id: '' }, //单位体检次数
checkAsbs: null, patientName: '', //姓名
sex: '', //性别
idCardNo: '', //身份证号
haveImage: false, checkAsb: '', //检查项目
checkCompleteFlag:'', //检查项目状态
isAuditCheck:'', //检查项目审核
}, completeFlag: [] },
quickAsb: [], asbItemQuick: [],
dom: null, //用于滚动加载数据
lazyLoading: false, //是否懒加载中
loadOpts: { totalCount: 0, skipCount: 0, maxResultCount: 100, }, loadOptsInit: {},
oneClick: 0, // 1 表示行单击一次
DbClick: 0, // 1 表示行有单击第二次
}; },
created() { this.dictInit() this.loadOptsInit = Object.assign({}, this.loadOpts) },
//挂载完成
mounted() { this.$nextTick(() => { this.scrollFull() }) }, computed: { ...mapState(["window", "dataTransOpts", "dict", "customerOrg", "patientRegister", "doctorCheck", "sumDoctorCheck", "report"]), divHeight() { if (this.win == "doctorCheck") { return 170 } else { return 105 } }, tableHeight(){ return this.winAbsolute ? (this.window.pageHeight - 46 - 30 - this.divHeight) : (this.window.pageHeight - 46 - this.divHeight) }, }, methods: { ...mapMutations(['doctorCheckPrBaseInit', 'sumPREditInit']), dddw,
dictInit() { // 默认 当天 体检日期
let today = moment(new Date()).format('yyyy-MM-DD'); this.report.dataCusOrgOCX = [{ id: Date.now(), customerOrgId: "", customerOrgName: "", customerOrgRegister: {}, customerOrgRegisterList: [], dateType: "medicalStartDate", startDate: today, endDate: today, customerOrgGroupIds: [], customerOrgGroupList: [] }] this.patientRegister.query.cusOrgOCX = `(体检${today}~${today})`
//分组,所有分组,不限单位,不限次数
getapi("/api/app/customerorggroup/getlistinfilter").then((res) => { if (res.code > -1) { this.dict.customerOrgGroupAll = res.data; } });
// 获取组合项目
postapi('/api/app/asbitem/GetBasicList', { isFilterActive: 'Y' }).then(res => { if (res.code != -1) { this.asbItemQuick = res.data this.quickAsb = res.data } });
this.local.completeFlag = deepCopy(this.dict.completeFlag) this.local.completeFlag.splice(0, 1) //预记选项去掉
this.local.completeFlag.splice(2, 0, { id: '5', displayName: '全部已检(未总检)' }) //插入
},
//快速选择组合项目时,调整可按拼间简码及简称查找
filterMethod(keyWords) { //console.log('filterMethod',this.asbItemQuick)
if (keyWords) { this.quickAsb = []; this.asbItemQuick.forEach(item => { if (item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1 || item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1 || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1) { this.quickAsb.push(item); } }); } else { this.quickAsb = deepCopy(this.asbItemQuick); } },
//快速选择组合项目
// quickChoosedAsb(v) {
// //远程查询时,设置了 value-key 也不管用,只能取到value console.log('quickChoosedAsb',v)
// let lfind = -1
// if (v) {
// lfind = arrayExistObj(this.asbItemQuick, 'id', v)
// if (lfind > -1) {
// this.addAbs([this.asbItemQuick[lfind]])
// }
// }
// //this.$refs['quickAsbOCX'].focus(); //asbItemId
// this.$nextTick(() => {
// this.$refs['quickAsbOCX'].blur(); //total asbItemId
// this.asbItemId = ''
// this.quickAsb = deepCopy(this.asbItemQuick)
// this.$refs['quickAsbOCX'].focus(); //total asbItemId
// });
// },
//点击体检次数行
rowClick(row) {
if (this.oneClick == 0) { this.oneClick = 1; } else { this.DbClick = 1; }
//双击事件
if (this.DbClick == 1) { //第一次点击的节点和第二次点击的节点id相同
this.rowClickRetrieve(row) return; }
setTimeout(() => { //300ms内没有第二次点击,执行单击事件
if (this.oneClick == 1 && this.DbClick == 0) this.rowClickRetrieve(row) }, 300)
},
rowClickRetrieve(row) { this.oneClick = 0; this.DbClick = 0;
this.dataTransOpts.tableS.patient_register = deepCopy(row) // setTimeout(() => {
this.dataTransOpts.refresh.patient_register.S++ //人员体检登记信息刷新
// }, 10);
},
//双击选中客户记录后,并半闭列表
rowDblclick(row) { // this.rowClick(row)
this.doctorCheck.doctorCheckDialogVisible = false this.sumDoctorCheck.sumDoctorCheckDialogVisible = false // console.log('rowDblclick', this.doctorCheck.doctorCheckDialogVisible, this.sumDoctorCheck.sumDoctorCheckDialogVisible)
},
lmoment(date, forMat) { return moment(new Date(date)).format(forMat); },
//查询
async query() { this.loadOpts = Object.assign(this.loadOpts, this.loadOptsInit) await this.getPrList() },
async getPrList() { if (this.loadOpts.skipCount != 0 && this.loadOpts.skipCount * this.loadOpts.maxResultCount >= this.loadOpts.totalCount) return let body = {}, customerOrgs = [] console.log('this.report.dataCusOrgOCX', this.report.dataCusOrgOCX) if (this.report.dataCusOrgOCX.length > 0) { this.report.dataCusOrgOCX.forEach(e => { let rd = { startDate: moment(e.startDate).format('yyyy-MM-DD'), endDate: moment(e.endDate).format('yyyy-MM-DD'), dateType: e.dateType == 'summaryDate' ? '3' : (e.dateType == 'medicalStartDate' ? '2' : '1') }
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.local.query.patientName) body.patientName = this.local.query.patientName if (this.local.query.sex) body.sexId = this.local.query.sex if (this.local.query.isAudit) body.isAudit = this.local.query.isAudit if (this.local.query.completeFlag) body.completeFlag = this.local.query.completeFlag if (this.local.query.checkAsb) body.asbitems = [this.local.query.checkAsb] if (this.local.query.haveImage) body.isPicture = 'Y' if (this.local.query.checkCompleteFlag) body.asbitemCompleteFlag = this.local.query.checkCompleteFlag if (this.local.query.isAuditCheck) body.asbitemIsAudit = this.local.query.isAuditCheck
body.isFilterPreRegistration = 'Y' //是否需要过滤预登记数据 Y=过滤预登记数据 N=不过滤 默认为N (备注:只有CompleteFlag参数的值不为0的情况才有效,null值也有效)
// "patientName": "string",
// "sexId": "string",
// "isAudit": "string",
// "completeFlag": "string",
// "maxResultCount": 0
// console.log('/api/patientregister/getpeisrecordlist', Object.assign(body, this.loadOpts))
// const loading = this.$loading({
// lock: true,
// text: "Loading",
// spinner: "el-icon-loading",
// background: "rgba(0, 0, 0, 0.7)",
// });
body = Object.assign(body, this.loadOpts) let url = '/api/app/PatientRegister/GetSumDoctorPeisRecordList' if(this.win == "doctorCheck") url = '/api/app/PatientRegister/GetDoctorPeisRecordList'
postapi(url, body) .then((res) => { if (res.code > -1) {
// 刷新最大记录数
this.loadOpts.totalCount = res.data.totalCount if (body.skipCount == 0) this.dataList = []; this.dataList = this.dataList.concat(res.data.items)
} }) // .finally(() =>{
// loading.close();
// })
; },
//数据量多时,滚动加载
async load() { this.loadOpts.skipCount++ await this.getPrList() },
//滚动加载数据
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
} } }) },
//关闭
close() { //console.log('this.win',this.win)
if (this.win == 'doctorCheck') { this.doctorCheck.doctorCheckDialogVisible = false } else { this.sumDoctorCheck.sumDoctorCheckDialogVisible = false } },
},
//监听事件
watch: {
},};</script><style scoped>.box { display: flex;}
.query { margin-left: 5px; margin-bottom: 2px; font-size: 14px;}
.listBtn { margin-top: 10px;}</style>
|