pengjun 1 year ago
parent
commit
b35d1dbc44
  1. BIN
      public/files/检验结果导入模板_横向.xls
  2. BIN
      public/files/检验结果导入模板_纵向.xls
  3. 40
      src/components/doctorCheck/CheckItemList.vue
  4. 9
      src/components/patientRegister/PatientRegisterList.vue
  5. 6
      src/router/index.js
  6. 7
      src/views/customerOrg/patientRegisterImport.vue
  7. 194
      src/views/doctorCheck/checkPicImport.vue
  8. 1294
      src/views/doctorCheck/lisResultImport.vue

BIN
public/files/检验结果导入模板_横向.xls

BIN
public/files/检验结果导入模板_纵向.xls

40
src/components/doctorCheck/CheckItemList.vue

@ -31,7 +31,10 @@
<!-- 结果录入模版 -->
<el-dialog title="结果录入模版" :visible.sync="dialogWinMoreResult" width="800px" :close-on-click-modal="false">
<div style="margin-top: -10px;">
<div style="overflow-y:auto; height:300px;width:100%;display: flex;flex-wrap: wrap;align-content: flex-start;">
<el-checkbox v-model="isSplitChooseResult" size="small" true-label="Y"
false-label="N">选结果模板时自动添加分隔符</el-checkbox>
<div
style="overflow-y:auto; height:300px;width:100%;display: flex;flex-wrap: wrap;align-content: flex-start;">
<div v-for="item in moreResult.data" :key="item.id" style="margin: 5px;cursor:pointer;"
@click="clickResult(item)" @dblclick="dblclickResult(item)">
<el-tag size="samll"
@ -41,7 +44,7 @@
</div>
<div>特殊符号</div>
<div style="overflow-y:auto; width:100%;display: flex;flex-wrap: wrap;align-content: flex-start;">
<div v-for="item in symbols" :key="item.id" style="margin: 1px; 2px;cursor:pointer;"
<div v-for="item in symbols" :key="item.id" style="margin: 1px 2px;cursor:pointer;"
@click="insertSymbols(item.displayName)">
<el-tag
style="padding: 0 3px;height: 24px;line-height: 24px;font-size: 15px;color: #303133;background-color: white;">
@ -49,7 +52,18 @@
</el-tag>
</div>
</div>
<div>录入结果</div>
<div style="display: flex;justify-content: space-between;">
<div style="margin-top: 5px;">录入结果</div>
<div style="overflow-y:auto; display: flex;flex-wrap: wrap;">
<div v-for="item in splitSymbols" :key="item" style="margin: 1px 2px;cursor:pointer;"
@click="insertSymbols(item)">
<el-tag
style="padding: 0 3px;height: 24px;line-height: 24px;font-size: 15px;color: #303133;background-color: white;">
{{ item }}
</el-tag>
</div>
</div>
</div>
<el-input id="resultBox" style="width: 100%;" class="commonFont" type="textarea"
:autosize="{ minRows: 4, maxRows: 4 }" v-model="moreResult.result" />
</div>
@ -70,7 +84,7 @@ import { arrayExistObj, dddw, deepCopy } from '../../utlis/proFunc'
export default {
components: {},
props: ["isCheckPicture", "registerCheckId","doctor_check_check_charge"],
props: ["isCheckPicture", "registerCheckId", "doctor_check_check_charge"],
data() {
return {
resultStatus: [], //
@ -103,11 +117,12 @@ export default {
result: '',
index: 0, //
}, //
isSplitChooseResult: 'N', //
selection: { //
start: 0, end: 0
},
symbols: [], //
splitSymbols: [';', '、'], //
userId: '',
};
},
@ -380,12 +395,19 @@ export default {
this.clickResult(item)
this.btnOkResult()
},
//
clickResult(item) {
let result = []
if (this.moreResult.result) result = this.moreResult.result.split(';')
if (result.indexOf(item.result) > -1) return
result.push(item.result)
//
if (this.isSplitChooseResult == 'Y' && result.indexOf(item.result) > -1) return
if (this.isSplitChooseResult == 'Y' || result.length == 0) {
result.push(item.result)
} else {
result[result.length - 1] = result[result.length - 1] + item.result
}
let ret = ''
result.forEach((e, i) => {
let splitStr = ';'
@ -435,7 +457,7 @@ export default {
if (res.code > -1) {
this.doctorCheck.RegisterCheckEdit = res.data
if (res.data.isCharge != 'Y' && this.doctor_check_check_charge == 'Y') {
this.$message.warning({showClose:true,message:`该体检人员未缴清费用!`})
this.$message.warning({ showClose: true, message: `该体检人员未缴清费用!` })
}
if (this.doctorCheck.RegisterCheckEdit.completeFlag == '0') {
this.doctorCheck.RegisterCheckEdit.checkDoctorId = this.userId
@ -689,5 +711,3 @@ export default {
font-family: "Microsoft YaHei";
}
</style>

9
src/components/patientRegister/PatientRegisterList.vue

@ -1144,10 +1144,19 @@ export default {
this.loadOpts.totalCount = res.data.totalCount
let curLoad = res.data.items
// let oldCount = 0
// /
curLoad.forEach(e => {
if(e.customerOrgId == this.dict.personOrgId){
e.groupPack = e.medicalPackageId
}else{
e.groupPack = e.customerOrgGroupId
}
});
if (body.skipCount == 0) { //
this.tableData = [];
}
this.tableData = this.tableData.concat(curLoad)
// else {
// // ,

6
src/router/index.js

@ -459,6 +459,12 @@ const routes = [{
name: "批量导入图片",
component: () =>
import ("../views/doctorCheck/checkPicImport.vue"),
},
{
path: "/lisResultImport",
name: "从文件导入检验结果",
component: () =>
import ("../views/doctorCheck/lisResultImport.vue"),
},
//---------------------- 体 检 end ----------------------
//---------------------- 体检查询 start ----------------------

7
src/views/customerOrg/patientRegisterImport.vue

@ -93,7 +93,7 @@
<el-dialog title="导入EXCEL注意事项" :visible.sync="dialogGroup.fileReadme" width="700px" :show-close="false"
:append-to-body="true" :close-on-click-modal="false">
<div style="height:400px;padding: 0 20px; ">
<br />导入Excel时Excel的格式必须符合一定规范该格式的模板文件放在程序的执行目录下文件名为"单位体检人员名单导入模板.xls"
<br />导入Excel时Excel的格式必须符合一定规范该格式的模板文件可通过下载模板获取
<br />注意事项如下:
<br />
<div style="margin-left: 25px;">1姓名不能为空其余数据可根据实际情况选择是否填写
@ -138,11 +138,12 @@
:close-on-click-modal="false"> <!--:append-to-body="true" -->
<div style="height:400px;">
<div style="margin-top: -10px;">
1按住 Ctr1 Shift 键可进行多选在标题列右击鼠标可设置列名标题列有<br>
1在标题列右击鼠标可设置列名标题列有 才参与数据导入<br>
2身份证号有值且合法时将以身份证号为主自动换算性别出生日期及年龄<br>
3按住 Ctr1 Shift 键可进行多选<br>
</div>
<div style="margin: 5px 0px 0px;" @contextmenu.prevent=""> <!-- -->
<el-table :data="excelData" border ref="excelData" @header-contextmenu="headerContextmenu" height="360"
<el-table :data="excelData" border ref="excelData" @header-contextmenu="headerContextmenu" height="340"
@row-click="chooseDataImport" row-key="id" highlight-current-row size="small"
:row-class-name="handleRowClassName">
<el-table-column type="index" align="center" label="序号" min-width="40" />

194
src/views/doctorCheck/checkPicImport.vue

@ -65,20 +65,38 @@
</div>
</el-upload>
</div>
<div style="display: flex;margin-top: 10px;justify-content:space-between;">
<div style="display: flex;margin: 5px 0;">
<span>条码方式</span>
<div>
<el-radio-group v-model="upPic.barcodeMode" @change="upPic.asbitemId = ''">
<el-radio label="0">人员条码</el-radio>
<el-radio label="1">检验条码</el-radio>
<el-radio label="2">检查条码</el-radio>
</el-radio-group>
</div>
<div v-show="upPic.barcodeMode != '2'">
<el-select v-model="upPic.asbitemId" placeholder="请选择检查项目" filterable clearable size="small"
style="width:240px;margin: -5px 0 0 25px;" @focus="getAsbitems()">
<el-option v-for="item in asbitems" :key="item.asbitemId" :label="item.asbitemName"
:value="item.asbitemId" />
</el-select>
</div>
</div>
<div style="display: flex;justify-content:space-between;">
<div>
<div style="display: flex;">
<span style="margin: 5px 0;">条码号</span>
<el-select v-model="upPic.getCheckNoMode" placeholder="截取检查号" filterable size="small"
style="width:180px;margin: 0 5px 0 0;">
<el-option label="文件名即检查号" value="0" />
<el-option label="文件名即条码号" value="0" />
<el-option label="文件名左侧 ? 个字符" value="1" />
<el-option label="文件名右侧 ? 个字符" value="2" />
<el-option label="文件名第 ? 至 ? 个字符" value="3" />
</el-select>
<el-input v-model="upPic.startLen" style="width:150px;" size="small"
<el-input v-model="upPic.startLen" style="width:100px;" size="small"
v-if="upPic.getCheckNoMode == '1' || upPic.getCheckNoMode == '2' || upPic.getCheckNoMode == '3'" />
<span v-if="upPic.getCheckNoMode == '3'" style="padding: 5px 5px;"></span>
<el-input v-model="upPic.endLen" style="width:150px;" size="small" v-if="upPic.getCheckNoMode == '3'" />
<el-input v-model="upPic.endLen" style="width:100px;" size="small" v-if="upPic.getCheckNoMode == '3'" />
</div>
</div>
<div>
@ -121,12 +139,16 @@ export default {
routeUrlorPageName: 'patientRegisterBatch', //
privs: [] //
},
upPic: {
visible: false,
barcodeMode: '0',
asbitemId: '',
getCheckNoMode: '3',
startLen: null,
endLen: null
startLen: 1,
endLen: 6
},
asbitems: [],
tableData: [],
dialogImageUrl: '',
dialogVisible: false,
@ -140,9 +162,6 @@ export default {
//
let userPriv = window.sessionStorage.getItem('userPriv')
if (userPriv) this.pagePriv.privs = deepCopy(getPagePriv(this.pagePriv.routeUrlorPageName))
},
//
@ -169,6 +188,72 @@ export default {
},
//
getAsbitems() {
if (!(this.fileList && typeof this.fileList == 'object' && this.fileList.length > 0)) {
this.$message.warning({ showClose: true, message: "请选择要上传的文件!" })
return
}
let err = ''
let file = this.fileList[0]
let fileName = ""
let dotIndex = file.name.lastIndexOf('.');
if (dotIndex > -1) fileName = file.name.substring(0, dotIndex);
let barcodeName = '人员'
switch (this.upPic.barcodeMode) {
case '1':
barcodeName = "检验"
break;
case '2':
barcodeName = "检查"
break;
default:
break;
}
let barcode = fileName
switch (this.upPic.getCheckNoMode) {
case '1':
barcode = fileName.substring(0, this.upPic.startLen)
if (barcode.length != this.upPic.startLen) err = `${fileName} 截取的 ${barcodeName}条码号 长度不够`
break;
case '2':
barcode = fileName.substring(fileName.length - this.upPic.startLen)
if (barcode.length != this.upPic.startLen) err = `${fileName} 截取的 ${barcodeName}条码号 长度不够`
break;
case '3':
barcode = fileName.substring(this.upPic.startLen - 1, this.upPic.endLen)
if (barcode.length != Number(this.upPic.endLen - this.upPic.startLen) + Number(1)) err = `${fileName} 截取的 ${barcodeName}条码号 长度不够`
break;
default:
break;
}
if (err) {
this.$message.warning({ showClose: true, message: err })
return
}
this.upPic.asbitemId = ''
this.asbitems = []
switch (this.upPic.barcodeMode) {
case "0":
postapi('/api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterNos', { patientRegisterNos: [barcode] })
.then(res => {
if (res.code > -1) this.asbitems = res.data
})
break;
case "1":
break;
default:
break;
}
},
//
getSummaries(param) {
const { columns, data } = param;
@ -222,6 +307,7 @@ export default {
this.$message.warning({ showClose: true, message: "请选择要上传的文件!" })
return
}
let checkSize = []
this.fileList.forEach(e => {
if (e.size > 1024 * 1024 * 20) checkSize.push(e.name)
@ -232,6 +318,11 @@ export default {
return;
}
if (this.upPic.barcodeMode != '2' && !this.upPic.asbitemId) {
this.$message.error({ showClose: true, message: `请选择检查项目` })
return;
}
let that = this;
let count = 0, err = '';
console.log('this.fileList', this.fileList)
@ -239,7 +330,7 @@ export default {
let file = this.fileList[i]
console.log('file', file)
let reader = new FileReader();
//
reader.onload = (event) => {
let fileName = ""
@ -265,35 +356,52 @@ export default {
break;
}
count++;
if (err) {
if (err) {
that.tableData.push({
importState:'导入失败',
importDes:err,
importState: '导入失败',
importDes: err,
fileName,
})
} else {
})
} else {
let rd = {
importState:'导入失败',
importDes:err,
importState: '导入失败',
importDes: err,
fileName,
}
}
let body = {
checkRequestNo,
checkRequestNo, //
pictureName: fileName,
pictureBase64: data
pictureBase64: data,
patientRegisterNo: checkRequestNo, //
asbitemId: this.upPic.asbitemId
}
let url = '/api/app/RegisterCheckPicture/ImportRegisterCheckPicture'
switch (this.upPic.barcodeMode) {
case '0':
url = '/api/app/RegisterCheckPicture/ImportRegisterCheckPictureByPatientRegisterNo'
break;
case '1':
url = '/api/app/RegisterCheckPicture/ImportRegisterCheckPictureByLisRequestNo'
break;
default:
break;
}
postapi('/api/app/RegisterCheckPicture/ImportRegisterCheckPicture', body)
.then(res => {
if (res.code > -1) {
postapi(url, body)
.then(res => {
if (res.code > -1) {
rd.importState = "导入成功"
rd.importDes = ""
rd.importDes = ""
} else {
rd.importDes = res.message
rd.importDes = res.message
}
})
.catch(error => {
rd.importDes = `${error}`
rd.importDes = `${error}`
})
.finally(() => {
that.tableData.push(rd)
@ -316,27 +424,13 @@ export default {
};
},
closePicUpload(){
closePicUpload() {
this.upPic.visible = false
},
//
importRowClassName({ row, rowIndex }) {
if (row.importState == '导入失败') {
@ -470,4 +564,22 @@ input[type="number"]::-webkit-outer-spin-button {
::v-deep .menu_item {
line-height: 24px;
}
::v-deep .el-upload--picture-card {
width: 148px;
height: 148px;
line-height: 146px;
}
::v-deep .el-upload-list--item-thumbnail {
width: 72px;
height: 72px;
line-height: 72px;
}
::v-deep .el-upload-list--item-actions {
width: 72px;
height: 72px;
line-height: 72px;
}
</style>

1294
src/views/doctorCheck/lisResultImport.vue
File diff suppressed because it is too large
View File

Loading…
Cancel
Save