画像审核

This commit is contained in:
shidongli 2024-06-27 18:12:44 +08:00
parent e2afa2135f
commit 83cb8ef2d8
5 changed files with 316 additions and 238 deletions

View File

@ -58,4 +58,21 @@ export function getPortaitInfo(patientId) {
url: `/manage/signRecord/getPortaitInfo/${patientId}`, url: `/manage/signRecord/getPortaitInfo/${patientId}`,
method: 'get', method: 'get',
}) })
} }
// 画像审核
export function updatePortaitCheckStatus(data) {
return request({
url: `/manage/signRecord/updatePortaitCheckStatus`,
method: 'post',
data
})
}
// 画像审核查询
export function getPortaitByPatient(query) {
return request({
url: '/manage/labelfieldcontent/getPortaitByPatient',
method: 'get',
params: query
})
}

View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
export function groupingValue(query) {
return request({
url: '/manage/labelfieldcontent/groupingValue',
method: 'get',
params: query
})
}

View File

@ -1,5 +1,5 @@
<template> <template>
<div style="background-color: #f1f3f5;padding-top:16px"> <div style="background-color: #f1f3f5; padding-top: 16px">
<div slot="footer" class="topfooter"> <div slot="footer" class="topfooter">
<el-tabs v-model="activeNametab" @tab-click="handleClick"> <el-tabs v-model="activeNametab" @tab-click="handleClick">
<el-tab-pane label="画像审核" name="portrait"></el-tab-pane> <el-tab-pane label="画像审核" name="portrait"></el-tab-pane>
@ -7,15 +7,37 @@
</el-tabs> </el-tabs>
<div class="right" v-if="activeNametab == 'portrait'"> <div class="right" v-if="activeNametab == 'portrait'">
<el-button size="mini" @click="cancel">返回</el-button> <el-button size="mini" @click="cancel">返回</el-button>
<el-button size="mini" type="primary" @click="auditing">审核通过</el-button> <el-button
<el-button size="mini" type="info" @click="ignore">忽略</el-button> size="mini"
type="primary"
@click="auditing"
v-if="portaitCheckStatus != 'AGREE' && CheckStatus != 'DISAGREE'"
>审核通过</el-button
>
<el-button
size="mini"
type="info"
@click="ignore"
v-if="portaitCheckStatus != 'AGREE' && CheckStatus != 'DISAGREE'"
>忽略</el-button
>
</div> </div>
<div class="right" v-else> <div class="right" v-else>
<el-button size="mini" @click="cancel">返回</el-button> <el-button size="mini" @click="cancel">返回</el-button>
<el-button size="mini" type="primary" @click="auditing" <el-button
v-if="routeCheckStatus != 'AGREE' && routeCheckStatus != 'DISAGREE'">审核通过</el-button> size="mini"
<el-button size="mini" type="info" @click="ignore" type="primary"
v-if="routeCheckStatus != 'AGREE' && routeCheckStatus != 'DISAGREE'">忽略</el-button> @click="auditing"
v-if="routeCheckStatus != 'AGREE' && routeCheckStatus != 'DISAGREE'"
>审核通过</el-button
>
<el-button
size="mini"
type="info"
@click="ignore"
v-if="routeCheckStatus != 'AGREE' && routeCheckStatus != 'DISAGREE'"
>忽略</el-button
>
</div> </div>
</div> </div>
<!-- 画像审核 --> <!-- 画像审核 -->
@ -23,8 +45,16 @@
<div class="cardleft"> <div class="cardleft">
<div class="title"> <div class="title">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<img class="headsculpture" v-if="list.sex == 'MALE'" src="../../../assets/manage/touxiang.png" /> <img
<img class="headsculpture" v-else src="../../../assets/manage/nvtouxiang.png" /> class="headsculpture"
v-if="list.sex == 'MALE'"
src="../../../assets/manage/touxiang.png"
/>
<img
class="headsculpture"
v-else
src="../../../assets/manage/nvtouxiang.png"
/>
<div class="name"> <div class="name">
{{ list.patientName ? list.patientName : "" }} {{ list.patientName ? list.patientName : "" }}
</div> </div>
@ -42,17 +72,27 @@
{{ list.visitMethod == "OUTPATIENT_SERVICE" ? "门诊" : "" }} {{ list.visitMethod == "OUTPATIENT_SERVICE" ? "门诊" : "" }}
{{ list.visitMethod == "BE_IN_HOSPITAL" ? "住院" : "" }} {{ list.visitMethod == "BE_IN_HOSPITAL" ? "住院" : "" }}
</div> </div>
<div class="item" style="color: #00e06e; border-color: #00e06e" <div
v-if="list.patientSource == 'WE_CHAT_OFFICIAL_ACCOUNT'"> class="item"
style="color: #00e06e; border-color: #00e06e"
v-if="list.patientSource == 'WE_CHAT_OFFICIAL_ACCOUNT'"
>
<img src="../../../assets/manage/gzh.png" alt="" /> <img src="../../../assets/manage/gzh.png" alt="" />
<div>公众号</div> <div>公众号</div>
</div> </div>
<div class="item" style="color: #339de5; border-color: #339de5" <div
v-if="list.patientSource == 'WE_CHAT_APPLET'"> class="item"
style="color: #339de5; border-color: #339de5"
v-if="list.patientSource == 'WE_CHAT_APPLET'"
>
<img src="../../../assets/manage/xcx.png" alt="" /> <img src="../../../assets/manage/xcx.png" alt="" />
<div>小程序</div> <div>小程序</div>
</div> </div>
<div class="item" style="color: #f4881f; border-color: #f4881f" v-if="list.patientSource == 'MANAGE_END'"> <div
class="item"
style="color: #f4881f; border-color: #f4881f"
v-if="list.patientSource == 'MANAGE_END'"
>
<img src="../../../assets/manage/gld.png" alt="" /> <img src="../../../assets/manage/gld.png" alt="" />
<div>管理端</div> <div>管理端</div>
</div> </div>
@ -72,7 +112,7 @@
出院时间: {{ list.dischargeTime }} 出院时间: {{ list.dischargeTime }}
</div> </div>
<div class="text" v-if="list.visitMethod == 'BE_IN_HOSPITAL'"> <div class="text" v-if="list.visitMethod == 'BE_IN_HOSPITAL'">
审核时间: {{ list.dischargeTime }} 审核时间: {{ list.portaitCheckDate }}
</div> </div>
<div class="text" v-if="list.visitMethod == 'OUTPATIENT_SERVICE'"> <div class="text" v-if="list.visitMethod == 'OUTPATIENT_SERVICE'">
就诊时间: {{ list.dischargeTime }} 就诊时间: {{ list.dischargeTime }}
@ -80,34 +120,57 @@
</div> </div>
<el-descriptions title="诊断信息" style="margin: 16px auto"> <el-descriptions title="诊断信息" style="margin: 16px auto">
<el-descriptions-item label="主要诊断">{{ <el-descriptions-item label="主要诊断">{{
list.mainDiagnosis list.mainDiagnosis
}}</el-descriptions-item> }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-descriptions title="手术信息" style="margin: 0 auto 16px;padding-top:16px; border-top: 1px solid #e6ebf5" <el-descriptions
v-if="list.visitMethod != 'OUTPATIENT_SERVICE'"> title="手术信息"
style="
margin: 0 auto 16px;
padding-top: 16px;
border-top: 1px solid #e6ebf5;
"
v-if="list.visitMethod != 'OUTPATIENT_SERVICE'"
>
<el-descriptions-item label="手术名称">{{ <el-descriptions-item label="手术名称">{{
list.surgicalName list.surgicalName
}}</el-descriptions-item> }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames">
<el-collapse-item title="入院记录" name="-1"> <el-collapse-item title="入院记录" name="-1">
<div v-html="list.inHospitalInfo"></div> <div v-html="list.inHospitalInfo"></div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="手术记录" name="-2" v-if="list.visitMethod != 'OUTPATIENT_SERVICE'"> <el-collapse-item
title="手术记录"
name="-2"
v-if="list.visitMethod != 'OUTPATIENT_SERVICE'"
>
<div v-html="list.surgicalRecord"></div> <div v-html="list.surgicalRecord"></div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="出院记录" name="-3" v-if="list.visitMethod != 'OUTPATIENT_SERVICE'"> <el-collapse-item
title="出院记录"
name="-3"
v-if="list.visitMethod != 'OUTPATIENT_SERVICE'"
>
<div v-html="list.outHospitalInfo"></div> <div v-html="list.outHospitalInfo"></div>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</div> </div>
<!-- 画像编辑右侧 --> <!-- 画像编辑右侧 -->
<div class="cardright"> <div class="cardright">
<portrait @portraitlist="portraitlist"></portrait> <portrait
v-if="patientId"
@portraitlist="portraitlist"
:patientId="patientId"
:portaitCheckStatus="portaitCheckStatus"
></portrait>
</div> </div>
</div> </div>
<div class="card" v-else> <div class="card" v-else>
<PathReview ref="PathReview" @on-routeCheckStatus="onrouteCheckStatus"></PathReview> <PathReview
ref="PathReview"
@on-routeCheckStatus="onrouteCheckStatus"
></PathReview>
</div> </div>
</div> </div>
</template> </template>
@ -116,8 +179,8 @@
import { import {
getRouteNodeList, getRouteNodeList,
getByPatientId, getByPatientId,
audit, updateRouteCheckStatus,
updateRouteCheckStatus updatePortaitCheckStatus
} from '@/api/manage/Auditing.js' } from '@/api/manage/Auditing.js'
import { getAge } from "@/utils/age"; import { getAge } from "@/utils/age";
import portrait from '../components/portrait.vue' import portrait from '../components/portrait.vue'
@ -130,25 +193,42 @@ export default {
name: "Auditing", name: "Auditing",
data() { data() {
return { return {
activeNametab: 'route',// activeNametab: 'portrait',//
baseUrl: process.env.VUE_APP_BASE_API, baseUrl: process.env.VUE_APP_BASE_API,
activeNames: ['-1', '-2', '-3'], activeNames: ['-1', '-2', '-3'],
list: {}, list: {},
// nodelist: [], // nodelist: [],
lookitem: {}, lookitem: {},
routeCheckStatus: undefined, routeCheckStatus: undefined,
patientId: null,
portraitlistdata: [],
CheckStatus: undefined,
portaitCheckStatus: undefined,
}; };
}, },
created() { created() {
this.info(); // this.info();
this.patientId = this.$route.query.patientId
this.CheckStatus = this.$route.query.routeCheckStatus
console.log(this.CheckStatus, 'CheckStatus')
getByPatientId(this.$route.query.patientId).then(res => {
res.data.birthDate ? res.data.age = getAge(res.data.birthDate) : ''
this.list = res.data
this.portaitCheckStatus = res.data.portaitCheckStatus
console.log(this.portaitCheckStatus, '------')
})
// console.log(this.portaitCheckStatus, '--------------')
}, },
methods: { methods: {
// //
onrouteCheckStatus(e) { onrouteCheckStatus(e) {
this.routeCheckStatus = e.routeCheckStatus this.routeCheckStatus = e.routeCheckStatus
}, },
//
portraitlist(val) { portraitlist(val) {
console.log(val, '999999999') this.portraitlistdata = val
console.log(this.portraitlistdata, '999999999')
}, },
handleClick(tab, event) { handleClick(tab, event) {
console.log(tab, event, this.activeNametab); console.log(tab, event, this.activeNametab);
@ -182,12 +262,14 @@ export default {
}) })
} else { } else {
let obj = { let obj = {
routeCheckPerson: JSON.parse(localStorage.getItem('user')).nickName, patientId: this.patientId,
routeCheckRemark: value, portaitCheckRemark: value,
routeCheckStatus: 'DISAGREE', portaitCheckStatus: 'DISAGREE',
// manageRouteNodeIds: manageRouteNodeIds signPatientRecordId: this.$route.query.signRecordId,
labelFieldContentList: [],
} }
audit(obj).then(res => { obj.labelFieldContentList = this.portraitlistdata
updatePortaitCheckStatus(obj).then(res => {
this.$notify({ this.$notify({
type: 'success', type: 'success',
title: '提示', title: '提示',
@ -234,18 +316,23 @@ export default {
}) })
} else { } else {
let obj = { let obj = {
routeCheckPerson: JSON.parse(localStorage.getItem('user')).nickName, patientId: this.patientId,
routeCheckRemark: value, portaitCheckRemark: value,
routeCheckStatus: 'AGREE', portaitCheckStatus: 'AGREE',
// manageRouteNodeIds: manageRouteNodeIds signPatientRecordId: this.$route.query.signRecordId,
labelFieldContentList: [],
} }
audit(obj).then(res => { obj.labelFieldContentList = this.portraitlistdata
console.log(obj, 'tijiao')
// return
updatePortaitCheckStatus(obj).then(res => {
this.$notify({ this.$notify({
type: 'success', type: 'success',
title: '提示', title: '提示',
message: '画像审核通过', message: '画像审核通过',
duration: 3000 duration: 3000
}); });
this.info()
}) })
} }
}) })
@ -254,6 +341,8 @@ export default {
getByPatientId(this.$route.query.patientId).then(res => { getByPatientId(this.$route.query.patientId).then(res => {
res.data.birthDate ? res.data.age = getAge(res.data.birthDate) : '' res.data.birthDate ? res.data.age = getAge(res.data.birthDate) : ''
this.list = res.data this.list = res.data
this.portaitCheckStatus = res.data.portaitCheckStatus
console.log(this.portaitCheckStatus, '===============')
}) })
// getRouteNodeList({ patientId: this.$route.query.patientId, taskCreateType: 'MANUAL_CREATE', routeCheckStatus: "UNAUDITED" }).then(res => { // getRouteNodeList({ patientId: this.$route.query.patientId, taskCreateType: 'MANUAL_CREATE', routeCheckStatus: "UNAUDITED" }).then(res => {
// this.nodelist = res.data // this.nodelist = res.data

View File

@ -1,178 +1,145 @@
<template> <template>
<!-- <div class="texts"> --> <div class="topform">
<div class="topform"> <div v-if="getParamslistData">
<div v-if="getParamslistData" style="margin-bottom: 20px;"> <div
<el-card> v-for="(item, index) in getParamslistData"
<div class="toptitle">健康档案</div> :key="index"
<div style="display: flex"
v-for="(item, index) in form.items" >
:key="index" <el-card class="box-card">
style="display: flex" <el-form
ref="form"
:inline="true"
:model="form"
class="form"
label-width="100px"
:rules="rules"
> >
<el-card class="box-card"> <!-- {{item}} -->
<el-form <el-form-item
ref="form" v-for="(ite, ind) in item"
:inline="true" :label="ite.fieldName"
:model="form" :key="ind"
class="form" >
label-width="100px" <el-input class="textarea" v-model="ite.fieldValue" v-if="!portaitCheckStatus"></el-input>
:rules="rules" <el-input class="textarea" v-model="ite.fieldValue" disabled v-else></el-input>
>
<el-form-item </el-form-item>
v-for="(subItem, subIndex) in item.subItems" </el-form>
:key="subIndex"
label="活动名称"
>
<!-- <span style="font-size:12px">{{subItem.name}}</span> -->
<el-input v-model="subItem.name"></el-input>
</el-form-item>
</el-form>
</el-card>
<div class="icon">
<i
class="el-icon-delete"
@click="delitem(index)"
v-if="index != 0"
></i>
<i
v-if="index == 0"
class="el-icon-circle-plus-outline"
@click="additem(index)"
></i>
</div>
</div>
</el-card>
</div>
<div>
<el-card>
<div class="toptitle">诊断信息</div>
<div
v-for="(item, index) in form.items"
:key="index"
style="display: flex"
>
<el-card class="box-card">
<el-form
ref="form"
:inline="true"
:model="form"
class="form"
label-width="100px"
:rules="rules"
>
<el-form-item
v-for="(subItem, subIndex) in item.subItems"
:key="subIndex"
label="活动名称"
>
<!-- <span style="font-size:12px">{{subItem.name}}</span> -->
<el-input v-model="subItem.name"></el-input>
</el-form-item>
</el-form>
</el-card>
<div class="icon">
<i
class="el-icon-delete"
@click="delitem(index)"
v-if="index != 0"
></i>
<i
v-if="index == 0"
class="el-icon-circle-plus-outline"
@click="additem(index)"
></i>
</div>
</div>
</el-card> </el-card>
<div class="icon" v-if="!portaitCheckStatus">
<i
class="el-icon-delete"
@click="delitem(index)"
v-if="index != 0"
></i>
<i
v-if="index == 0"
class="el-icon-circle-plus-outline"
@click="additem(index)"
></i>
<!-- <el-button
v-if="
taskPartitionCode == 'MEDICATION_GUIDE' ||
taskPartitionCode == 'SPORT_GUIDE' ||
taskPartitionCode == 'DIET_GUIDE' ||
taskPartitionCode == 'NURSING_GUIDE'
"
round
style="margin-left: 10px"
@click="knowledge(index, item)"
>知识库获取</el-button
> -->
</div>
</div> </div>
</div> </div>
<!-- </div> -->
</div>
</template> </template>
<script> <script>
import {
getPortaitByPatient
} from '@/api/manage/Auditing.js'
export default { export default {
props:['patientId','portaitCheckStatus'],//psMsg
data() { data() {
return { return {
CheckStatus:'',
moban: [],
querytParams: {
taskPartitionDictId: 0,
// patientId: this.$route.query.patientId,
patientId: null,
},
rules: { rules: {
routeCheckStatus: [ routeCheckStatus: [
{ required: true, message: '请选择节点审核状态', trigger: 'change' } { required: true, message: '请选择节点审核状态', trigger: 'change' }
], ],
}, },
form: { form:{},
items: [ getParamslistData: [],
{
subItems: [{ name: '123' }, { name: '345' }],
},
],
},
moban: [],
getParamslistData: [
[{
paramName: "ceshi",
paramValue: ''
},
{
paramName: "ceshi222",
paramValue: ''
}
]
],
} }
}, },
watch: { watch: {
"form": { "getParamslistData": {
handler(newValue, oldValue) { handler(newValue, oldValue) {
console.log(newValue, "2222221111122"); console.log(newValue,'newValue')
this.$emit("portraitlist", newValue); this.$emit("portraitlist", newValue);
}, },
deep: true, deep: true,
}, },
portaitCheckStatus: {
handler(newValue, oldValue) {
this.portaitCheckStatus=newValue
console.log(newValue, "portaitCheckStatus");
},
}
}, },
created() { created() {
this.$emit("portraitlist", this.form); this.CheckStatus=this.$route.query.routeCheckStatus
},
}, mounted() {
mounted() { }, this.querytParams.patientId=this.patientId
this.getParams()
},
methods: { methods: {
additem(index) { //
const newDiv = { getParams() {
subItems: [{ name: '' }, { name: '' }], // getPortaitByPatient
}; getPortaitByPatient(this.querytParams).then(res => {
this.form.items.push(newDiv); console.log(res, 'res')
this.moban = JSON.parse(JSON.stringify(res.data))
this.getParamslistData = res.data
// console.log(this.getParamslistData, '009090')
// this.getParamslistData.push( })
// {
// paramName: "ceshi",
// paramValue: ''
// },
// {
// paramName: "ceshi2",
// paramValue: ''
// },
// )
console.log(this.getParamslistData)
// this.moban[0].forEach(e => {
// e.paramValue = ""
// e.id = ""
// })
// const newVal = JSON.parse(JSON.stringify(this.moban[0]))
// newVal.forEach(i => {
// i.sn = this.getParamslistData[this.getParamslistData.length - 1][0].sn + 1
// })
// this.getParamslistData.push(newVal)
}, },
//
additem(index) {
this.moban[0].forEach(e => {
e.fieldValue = ""
e.portraitSn = ''
// e.id = ""
})
const newVal = JSON.parse(JSON.stringify(this.moban[0]))
// const newVal = JSON.parse(JSON.stringify(this.getParamslistData[0]))
// newVal.forEach(i => {
// // i.sn = this.getParamslistData.length +1
// i.sn = this.getParamslistData[this.getParamslistData.length - 1][0].sn + 1
// })
this.getParamslistData.push(newVal)
},
//
delitem(index, item) { delitem(index, item) {
this.form.items.splice(index, 1) // this.form.items.splice(index, 1)
// this.getParamslistData.splice(index, 1) this.getParamslistData.splice(index, 1)
}, },
@ -180,60 +147,55 @@ export default {
} }
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
// .texts { ::v-deep .el-input.is-disabled .el-input__inner{
// // overflow-y: scroll; background: #fff;
// overflow-x: hidden; }
// width: 72%; .topform {
// height: calc(100vh - 30px); width: 100%;
// background-color: #fff; position: relative;
.topform { height: calc(100% - 177px);
width: 100%; // overflow-y: auto;
position: relative; padding: 15px 70px 30px 15px;
height: calc(100% - 177px); .toptitle {
// overflow-y: auto; font-weight: 500;
padding: 15px 70px 30px 15px; padding: 20px;
.toptitle { font-size: 18px;
font-weight: 500; }
padding: 20px; .box-card {
font-size: 18px; // width:calc(100% - 149px);
} width: 97%;
.box-card { margin-left: 20px;
// width:calc(100% - 149px); padding-top: 25px;
width: 97%; margin-bottom: 20px;
margin-left: 20px; .textarea {
padding-top: 25px; display: flex;
margin-bottom: 20px; // width: 500px;
.textarea { // width: 100%;
display: flex;
// width: 500px;
// width: 100%;
}
}
.icon {
width: 45px;
right: -20px;
top: 40px;
position: relative;
}
.form {
width: 100%;
::v-deep .el-form-item {
display: flex;
}
::v-deep .el-form-item__content {
flex: 1;
}
::v-deep .el-input__inner {
height: 30px !important;
line-height: 30px !important;
}
::v-deep .el-form-item__label {
font-size: 12px !important;
}
} }
} }
// } .icon {
</style> width: 45px;
right: -20px;
top: 40px;
position: relative;
}
.form {
width: 100%;
::v-deep .el-form-item {
display: flex;
}
::v-deep .el-form-item__content {
flex: 1;
}
::v-deep .el-input__inner {
height: 30px !important;
line-height: 30px !important;
}
::v-deep .el-form-item__label {
font-size: 12px !important;
}
}
}
</style>

View File

@ -454,6 +454,7 @@ export default {
query: { query: {
patientId: row.patientId, patientId: row.patientId,
signRecordId: row.id, signRecordId: row.id,
routeCheckStatus:row.routeCheckStatus
}, },
}); });
}, },