pengjun 4 weeks ago
parent
commit
18fe04179c
  1. 4
      public/sysConfig.json
  2. 4
      src/api/api.js
  3. 13
      src/views/customerOrg/patientRegisterImport.vue
  4. 280
      src/views/report/checkStatus.vue
  5. 18
      src/views/report/report.vue

4
public/sysConfig.json

@ -1,7 +1,7 @@
{ {
"apiurl": "http://192.168.1.138:9527",
"apiurl": "http://192.168.5.52:9530",
"softName": "神豚体检管理系统", "softName": "神豚体检管理系统",
"pacsApi": "http://192.168.1.138:9527",
"pacsApi": "http://192.168.5.52:9530",
"dcmViewers": "https://app.mzaktj.com:4436", "dcmViewers": "https://app.mzaktj.com:4436",
"pacsApiHttps": "https://app.mzaktj.com:8042", "pacsApiHttps": "https://app.mzaktj.com:8042",
"dict":{ "dict":{

4
src/api/api.js

@ -23,10 +23,10 @@ function startLoading() {
customClass: "boxStyle" customClass: "boxStyle"
}); });
// 调用接口 5秒 没结束,关闭锁屏
// 调用接口 30秒 没结束,关闭锁屏
setTimeout(() => { setTimeout(() => {
endLoading(loading) endLoading(loading)
}, 5000);
}, 30000);
return loading return loading
} }

13
src/views/customerOrg/patientRegisterImport.vue

@ -365,13 +365,9 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="age" align="center" label="年龄" min-width="40" /> <el-table-column prop="age" align="center" label="年龄" min-width="40" />
<el-table-column prop="customerOrgParentName" align="center" label="单位" min-width="150" />
<el-table-column prop="customerOrgName" align="center" label="部门" min-width="120" />
<el-table-column align="center" label="分组/套餐" min-width="150">
<template slot-scope="scope">
<div>{{ scope.row.customerOrgGroupName || scope.row.medicalPackageName }}</div>
</template>
</el-table-column>
<el-table-column prop="customerOrgParentName" align="center" label="单位" min-width="150" sortable/>
<el-table-column prop="customerOrgName" align="center" label="部门" min-width="120" sortable/>
<el-table-column prop="groupPack" align="center" label="分组/套餐" min-width="150" sortable/>
<el-table-column prop="telephone" align="center" label="电话" min-width="100" /> <el-table-column prop="telephone" align="center" label="电话" min-width="100" />
<el-table-column prop="mobileTelephone" align="center" label="手机" min-width="100" /> <el-table-column prop="mobileTelephone" align="center" label="手机" min-width="100" />
<el-table-column prop="creatorName" align="center" label="登记人员" min-width="80" /> <el-table-column prop="creatorName" align="center" label="登记人员" min-width="80" />
@ -1578,6 +1574,9 @@ export default {
if (res.data.length == 0) { if (res.data.length == 0) {
this.$message.warning("没有符合条件的数据") this.$message.warning("没有符合条件的数据")
} else { } else {
this.prList.forEach(e => {
e.groupPack = e.customerOrgGroupName || e.medicalPackageName
});
ret = true ret = true
} }
} }

280
src/views/report/checkStatus.vue

@ -39,78 +39,40 @@
<el-button type="primary" @click="btnQuery" size="small" class="commonbutton">查询</el-button> <el-button type="primary" @click="btnQuery" size="small" class="commonbutton">查询</el-button>
</div> </div>
<div class="query"> <div class="query">
<el-button @click="handleExport" size="small" class="commonbutton">导出excel</el-button>
<el-button @click="btnExportV" size="small" class="commonbutton">导出excel</el-button>
</div> </div>
</div> </div>
<div style="background-color: #fff; padding: 15px; border-radius: 8px;"> <div style="background-color: #fff; padding: 15px; border-radius: 8px;">
<el-table id="tableChekStatus" :data="dataList" border
<u-table id="tableChekStatus" :data="dataList" border
:height="window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20" row-key="id" size="small" :height="window.pageHeight < 600 ? 415 : window.pageHeight - 185 - 20" row-key="id" size="small"
highlight-current-row ref="dataList" :row-class-name="tableRowClassName">
<el-table-column type="index" label="序号" width="40" align="center" />
<el-table-column prop="checkRequestNo" label="检查条码" min-width="120" align="center" sortable/>
<el-table-column prop="asbitemName" label="检查项目" min-width="120" sortable/>
<el-table-column prop="completeFlag" label="检查状态" min-width="70" align="center" sortable>
highlight-current-row ref="dataList" :row-class-name="tableRowClassName" use-virtual
@sort-change="handleSortChange">
<!--列可拖拽 key值很关键 -->
<u-table-column v-for="(item, index) in dragCol" :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"> <template slot-scope="scope">
<div>{{ dddw(dict.checkCompleteFlag, 'id', scope.row.completeFlag, 'displayName') }}</div>
</template>
</el-table-column>
<el-table-column prop="isCharge" label="收费状态" width="70" align="center">
<template slot-scope="scope">
<div>{{ scope.row.checkCompleteFlag == 'Y' ? '已收费' : '未收费' }}</div>
</template>
</el-table-column>
<el-table-column prop="standardPrice" label="标准价格" width="70" align="center" />
<el-table-column prop="chargePrice" label="应收价格" width="70" align="center" />
<el-table-column prop="patientRegisterNo" label="人员条码号" width="130" sortable/>
<el-table-column prop="patientNo" label="档案号" width="130" sortable/>
<el-table-column prop="medicalTimes" label="体检次数" width="70" align="center" />
<el-table-column prop="customerOrgName" label="单位" width="180" sortable/>
<!--
<el-table-column prop="customerOrgParentName" label="单位" width="180">
<template slot-scope="scope">
<div>{{ scope.row.customerOrgParentName ? scope.row.customerOrgParentName : scope.row.customerOrgName }}</div>
</template>
</el-table-column>
-->
<el-table-column prop="departmentName" label="部门" width="180" sortable/>
<!--
<el-table-column prop="customerOrgName" label="部门" width="180">
<template slot-scope="scope">
<div>{{ scope.row.customerOrgParentName ? scope.row.customerOrgName : "" }}</div>
</template>
</el-table-column>
-->
<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 v-if="dragCol[index].prop == 'sn'">
{{ scope.$index + 1 }}
</div> </div>
<div v-if="scope.row.medicalPackageId !== dict.personOrgId && scope.row.customerOrgId !== dict.personOrgId">
{{ dddw(dict.customerOrgGroupAll, "id", scope.row.customerOrgGroupId, "displayName") }}
<div v-else-if="dragCol[index].prop == 'completeFlag'">
{{ dddw(dict.checkCompleteFlag, "id", scope.row[dragCol[index].prop], "displayName") }}
</div> </div>
-->
<div v-if="scope.row.medicalPackageName">
{{ scope.row.medicalPackageName }}
<div v-else-if="dragCol[index].prop == 'isCharge'">
{{ scope.row[dragCol[index]?.prop] == 'Y' ? '已收费' : '未收费' }}
</div> </div>
<div v-if="scope.row.customerOrgGroupName">
{{ scope.row.customerOrgGroupName }}
<!-- String(scope.row[dragCol[index]?.prop]||'') 屏蔽没有字段-->
<!-- 身份证档案号条码号电话/手机工卡号 加连接串防科学计数-->
<div v-else>
{{ (tecCols.includes(dragCol[index]?.prop) ? '\u200C' : '') +
String(scope.row[dragCol[index]?.prop]||'') }}
</div> </div>
</template> </template>
</el-table-column>
<el-table-column prop="patientName" label="姓名" width="80" sortable/>
<el-table-column prop="sexName" label="性别" sortable/>
<!--
<el-table-column prop="sexId" label="性别" >
<template slot-scope="scope">
<div>{{ dddw(dict.sex, "id", scope.row.sexId, "displayName") }}</div>
</template>
</el-table-column>
-->
<el-table-column prop="age" label="年龄" sortable/>
<el-table-column prop="mobileTelephone" label="手机" width="120" sortable/>
<el-table-column prop="telephone" label="电话" width="100" sortable/>
</el-table>
</u-table-column>
</u-table>
</div> </div>
</div> </div>
</div> </div>
@ -129,9 +91,12 @@
<script> <script>
import moment from "moment"; import moment from "moment";
import { mapState, mapActions } from "vuex"; import { mapState, mapActions } from "vuex";
import Sortable from "sortablejs";
import FileSaver from 'file-saver';
import { getapi, postapi, putapi, deletapi } from "@/api/api"; import { getapi, postapi, putapi, deletapi } from "@/api/api";
import { dddw, objCopy, arrayReduce, arrayExistObj, tcdate } from "@/utlis/proFunc"; import { dddw, objCopy, arrayReduce, arrayExistObj, tcdate } from "@/utlis/proFunc";
import { exportToExcel } from "../../utlis/Export2Excel"; import { exportToExcel } from "../../utlis/Export2Excel";
import { UTable, UTableColumn } from "umy-ui";
import CusOrgOCX from "../../components/report/CusOrgOCX.vue" import CusOrgOCX from "../../components/report/CusOrgOCX.vue"
import AsbitemOCX from "../../components/report/AsbitemOCX.vue" import AsbitemOCX from "../../components/report/AsbitemOCX.vue"
@ -139,10 +104,37 @@ export default {
components: { components: {
CusOrgOCX, CusOrgOCX,
AsbitemOCX, AsbitemOCX,
UTable,
UTableColumn,
}, },
data() { data() {
return { return {
dataList: [], // dataList: [], //
//
dragCol: [
{ label: "序号", prop: "sn", minWidth: 50, align: "center" },
{ label: "体检日期", prop: "medicalStartDate", minWidth: 100, align: "center" },
{ label: "检查日期", prop: "checkDate", minWidth: 100, align: "center" },
{ label: "检查条码", prop: "checkRequestNo", minWidth: 120, align: "center" },
{ label: "检查项目", prop: "asbitemName", minWidth: 120, align: "center" },
{ label: "检查状态", prop: "completeFlag", minWidth: 90, align: "center" },
{ label: "收费状态", prop: "isCharge", minWidth: 80, align: "center" },
{ label: "标准价格", prop: "standardPrice", minWidth: 80, align: "center" },
{ label: "应收价格", prop: "chargePrice", minWidth: 80, 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: "customerOrgName", minWidth: 180, align: "left", showTooltip: true },
{ label: "部门名称", prop: "departmentName", minWidth: 150, align: "left", showTooltip: true },
{ label: "分组/套餐", prop: "groupPack", minWidth: 150, align: "center", 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: "mobileTelephone", minWidth: 130, align: "center" },
{ label: "电话", prop: "telephone", minWidth: 130, align: "center" }
],
tecCols:["idNo","patientRegisterNo","patientNo","mobileTelephone","telephone","medicalCardNo","jobCardNo"], //
}; };
}, },
@ -153,6 +145,9 @@ export default {
// //
mounted() { mounted() {
// this.btnQuery(); // this.btnQuery();
//
this.initColDrag()
}, },
computed: { computed: {
@ -276,6 +271,58 @@ export default {
} }
}, },
//
handleSortChange({ column, prop, order }) {
// column:
// prop: prop
// order: 'ascending', 'descending', null
//console.log(':', column, prop, order)
//
if (order) {
this.dataList.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', 'groupPack'].includes(colName)) {
return valA.localeCompare(valB, 'zh');
} else {
return valA.localeCompare(valB);
}
} else {
return valA - valB
}
},
// //
btnQuery() { btnQuery() {
@ -351,17 +398,124 @@ export default {
//console.log('/api/app/peisreport/getpatientregisterreport',body) //console.log('/api/app/peisreport/getpatientregisterreport',body)
this.dataList = []
postapi('/api/app/peisreport/getregisterasbitemregistercheckstatus', body).then(res => { postapi('/api/app/peisreport/getregisterasbitemregistercheckstatus', body).then(res => {
if (res.code != -1) { if (res.code != -1) {
this.dataList = res.data; this.dataList = res.data;
this.makeDataList(this.dataList)
} }
}) })
}, },
///
makeDataList(data) {
data.forEach(e => {
e.groupPack = e.customerOrgGroupName || e.medicalPackageName
});
},
handleExport() { handleExport() {
exportToExcel("#tableChekStatus", "组合项目具体结果明细统计", false); exportToExcel("#tableChekStatus", "组合项目具体结果明细统计", false);
}, },
//
btnExportV() {
let table = `<table border="1" cellspacing="0" bordercolor="#000000" style="border-collapse:collapse">`
let thead = `<thead><tr>`
let th = ''
//
this.dragCol.forEach(e => {
if (e.prop) {
if (th) {
th += `<th>${e.label}</th>`
} else {
th = `<th>${e.label}</th>`
}
}
});
thead += th + `</tr></thead>`
//
let tr = ''
this.dataList.forEach((row, i) => {
let newRow = Object.assign({}, row)
let tds = ''
this.dragCol.forEach(e => {
let td = ''
if (e.prop) {
if (e.prop == 'sn') {
td = `<td>${i + 1}</td>`
} else if (e.prop == 'completeFlag') {
newRow[e.prop] = dddw(this.dict.checkCompleteFlag, "id", newRow[e.prop], "displayName")
td = `<td>${newRow[e.prop] || ''}</td>`
} else if (e.prop == 'isCharge') {
newRow[e.prop] = newRow[e.prop] == 'Y' ? '已收费' : '未收费'
td = `<td>${newRow[e.prop] || ''}</td>`
} else if (['isReportPrint', 'isVip', 'isUpload', 'isUploadAppoint', 'isReceiveReport', 'isPushThirdResult', 'isLock'].includes(e.prop)) {
if (newRow[e.prop] == 'Y') {
td = `<td>√</td>`
} else {
td = `<td></td>`
}
} else {
if (newRow[e.prop]) {
newRow[e.prop] = `\u200C${newRow[e.prop]}`
}
td = `<td>${newRow[e.prop] || ''}</td>`
}
}
if (tds) {
tds += td
} else {
tds = td
}
});
if (tr) {
tr += `<tr>${tds}</tr>`
} else {
tr = `<tr>${tds}</tr>`
}
});
let tbody = `<tbody>${tr}</tbody>`
table += thead + tbody + '</table>'
let fileName = moment(new Date()).format('yyyyMMDDHHmmss') + '.xls'
let blob = new Blob([table], { type: "text/plain;charset=utf-8" });
FileSaver.saveAs(blob, fileName);
},
//
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);
// 5.
//this.tableBrush += 1;
}
});
},
}, },
// //

18
src/views/report/report.vue

@ -58,8 +58,9 @@
<el-checkbox :value="scope.row[dragCol[index].prop] == 'Y'" true-label="Y" false-label="N" /> <el-checkbox :value="scope.row[dragCol[index].prop] == 'Y'" true-label="Y" false-label="N" />
</div> </div>
<!-- String(scope.row[dragCol[index]?.prop]||'') 屏蔽没有字段--> <!-- String(scope.row[dragCol[index]?.prop]||'') 屏蔽没有字段-->
<!-- 身份证档案号条码号电话/手机工卡号 加连接串防科学计数-->
<div v-else> <div v-else>
{{ '\u200C' + String(scope.row[dragCol[index]?.prop]||'') }}
{{ (tecCols.includes(dragCol[index]?.prop) ? '\u200C' : '') + String(scope.row[dragCol[index]?.prop] ||'') }}
</div> </div>
</template> </template>
@ -297,7 +298,6 @@ export default {
selectedRow: {}, // selectedRow: {}, //
checkedRows: [], // checkedRows: [], //
// //
selectionCol: 0,
dragCol: [ dragCol: [
{ label: "勾选", type: "selection", minWidth: 40, align: "center" }, { label: "勾选", type: "selection", minWidth: 40, align: "center" },
{ label: "序号", prop: "sn", minWidth: 40, align: "center" }, { label: "序号", prop: "sn", minWidth: 40, align: "center" },
@ -349,6 +349,7 @@ export default {
// { label: "", prop: "chargeAmount", minWidth: 80, align: "center" }, // { label: "", prop: "chargeAmount", minWidth: 80, align: "center" },
// { label: "", prop: "chargePayMode", minWidth: 80, align: "center" }, // { label: "", prop: "chargePayMode", minWidth: 80, align: "center" },
], ],
tecCols:["idNo","patientRegisterNo","patientNo","mobileTelephone","telephone","medicalCardNo","jobCardNo"], //
// //
medical_report_print_after_summary_check_is_audit: 'N', // Y-N- medical_report_print_after_summary_check_is_audit: 'N', // Y-N-
@ -424,7 +425,7 @@ export default {
// column: // column:
// prop: prop // prop: prop
// order: 'ascending', 'descending', null // order: 'ascending', 'descending', null
console.log('排序变化:', column, prop, order)
//console.log(':', column, prop, order)
// //
if (order) { if (order) {
@ -463,7 +464,7 @@ export default {
let valA = a[colName], valB = b[colName] let valA = a[colName], valB = b[colName]
if (typeof valA == 'string') { if (typeof valA == 'string') {
// //
if (['patientName', 'org', 'dept', 'address', 'remark'].includes(colName)) {
if (['patientName', 'org', 'dept', 'address', 'remark', 'groupPack'].includes(colName)) {
return valA.localeCompare(valB, 'zh'); return valA.localeCompare(valB, 'zh');
} else { } else {
return valA.localeCompare(valB); return valA.localeCompare(valB);
@ -728,7 +729,6 @@ export default {
// 4. // 4.
let movedColumn = this.dragCol.splice(oldIndex, 1)[0]; let movedColumn = this.dragCol.splice(oldIndex, 1)[0];
this.dragCol.splice(newIndex, 0, movedColumn); this.dragCol.splice(newIndex, 0, movedColumn);
//this.selectionCol = arrayExistObj(this.dragCol,'type','selection')
// 5. // 5.
//this.tableBrush += 1; //this.tableBrush += 1;
@ -904,12 +904,12 @@ export default {
let adds = [] let adds = []
res.data.items.forEach(e => { res.data.items.forEach(e => {
// //
if(arrayExistObj(this.tableDatas, 'patientRegisterId', e.patientRegisterId) == -1) adds.push(e)
if (arrayExistObj(this.tableDatas, 'patientRegisterId', e.patientRegisterId) == -1) adds.push(e)
}); });
this.tableDatas = this.tableDatas.concat(this.prListTrans(adds)) this.tableDatas = this.tableDatas.concat(this.prListTrans(adds))
if (this.tableDatas.length > 0 && adds.length > 0) { if (this.tableDatas.length > 0 && adds.length > 0) {
let lfind = arrayExistObj(this.tableDatas, 'patientRegisterId', adds[adds.length -1].patientRegisterId)
let lfind = arrayExistObj(this.tableDatas, 'patientRegisterId', adds[adds.length - 1].patientRegisterId)
if (lfind > -1) { if (lfind > -1) {
// this.$refs['info'].setCurrentRow(); // this.$refs['info'].setCurrentRow();
this.$nextTick(() => { this.$nextTick(() => {
@ -1691,7 +1691,7 @@ export default {
FileSaver.saveAs(blob, fileName); FileSaver.saveAs(blob, fileName);
}, },
//
btnExportV() { btnExportV() {
let table = `<table border="1" cellspacing="0" bordercolor="#000000" style="border-collapse:collapse">` let table = `<table border="1" cellspacing="0" bordercolor="#000000" style="border-collapse:collapse">`
let thead = `<thead><tr>` let thead = `<thead><tr>`
@ -1751,7 +1751,7 @@ export default {
table += thead + tbody + '</table>' table += thead + tbody + '</table>'
let fileName = moment(new Date()).format('yyyyMMDDHHmmss') + '.xlsx'
let fileName = moment(new Date()).format('yyyyMMDDHHmmss') + '.xls'
let blob = new Blob([table], { type: "text/plain;charset=utf-8" }); let blob = new Blob([table], { type: "text/plain;charset=utf-8" });
FileSaver.saveAs(blob, fileName); FileSaver.saveAs(blob, fileName);

Loading…
Cancel
Save