This commit is contained in:
zoujiandong 2025-07-10 13:35:03 +08:00
parent 8367b54f7f
commit 2ffecbe1d2
10 changed files with 1169 additions and 44 deletions

View File

@ -93,7 +93,7 @@ export const caseplatformCaseApi = {
return download('列表数据导出.xlsx',`/caseplatformCase/exportEasyExcel`, param);
},
exportSettlementExcel: (param) => {
return download('结算数据导出.xlsx',`/caseplatformCase/settlementExcel`, param);
return download('结算数据导出.xlsx',`/caseplatformCase/settlementExcel`, param,'multipart/form-data');
},
};

View File

@ -5,7 +5,7 @@
* @Date: 2024-01-11 15:18:32
* @Copyright gdxz
*/
import { postRequest, getRequest, download,uploadRequest } from '/@/lib/axios';
import { postRequest, getRequest, download,uploadRequest,delRequest} from '/@/lib/axios';
export const manageApi = {
@ -54,7 +54,9 @@ export const manageApi = {
return getRequest(`/caseplatformCase/settlement/${caseId}`);
},
delDoctor: (id) => {
return delRequest(`/caseplatformExpertWhite/delete/${id}`);
},
/**
* 审核 @author HMM

View File

@ -0,0 +1,23 @@
/*
* 部门
*
* @Author: 1024创新实验室-主任卓大
* @Date: 2022-09-03 21:58:50
* @Wechat: zhuda1024
* @Email: lab1024@163.com
* @Copyright 1024创新实验室 https://1024lab.net Since 2012
*/
import { getRequest, postRequest,delRequest} from '/@/lib/axios';
export const activityApi = {
/**
* 分页查询 @author HMM
*/
queryPage : (param) => {
return postRequest('/caseplatformCase/activity/queryPage', param);
},
delActivity: (id) => {
return delRequest(`/caseplatformCase/activity/delete/${id}`);
},
}

View File

@ -113,15 +113,22 @@ export const getRequest = (url, params) => {
export const uploadRequest = (url, data) => {
return request({ data, url, method: 'post', headers: { 'Content-Type': 'multipart/form-data' } });
};
export const delRequest = (url, data) => {
return request({ data, url, method: 'delete'});
};
/**
/**
* 文件下载
*/
export const download = function (fileName, url, params) {
export const download = function (fileName, url, params,header='application/json') {
request({
method: 'get',
url: url,
params: params,
responseType: 'blob',
headers: {
'Content-Type': header,
},
})
.then((data) => {
if (!data) {

View File

@ -173,8 +173,9 @@
<div class="row flex">
<imgCell
:type="'dpmas'"
:imgIndex="index"
v-for="(img,index) in dpm.dpmasImg.split(',')"
:dpmasId="dpm.dpmasId"
:imgIndex="imgindex"
v-for="(img,imgindex) in dpm.dpmasImg.split(',')"
:src="img.indexOf('http') > -1 ? img : fileHost + img"
@openEditor="openEditor"
></imgCell>
@ -314,7 +315,7 @@
保存
</a-button>
</div>
<imgEditor ref="imgEditorRef" :caseId="current_caseId" :caseObj="caseVO" v-if="showEdit" @freshDetail="getDetail" :type="imgType"></imgEditor>
<imgEditor ref="imgEditorRef" :imgIndex="imgIndex" :caseId="current_caseId" :caseObj="caseVO" v-if="showEdit" @freshDetail="getDetail" :type="imgType"></imgEditor>
</div>
</a-modal>
</template>
@ -338,7 +339,7 @@ const fallbackImg =
'data:image/png;base64,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';
const activeKey = ref('1');
const imgIndex = ref(0);
const current_reason = ref();
const current_caseId = ref();
const imgType = ref('');
@ -610,6 +611,7 @@ async function getDetail(id) {
const openEditor = (data) => {
showEdit.value = true;
imgType.value = data.type;
imgIndex.value = data.imgIndex;
nextTick(() => {
imgEditorRef.value?.init(data.src);
});

View File

@ -32,6 +32,10 @@ const props = defineProps({
type:{
type: String,
default: '',
},
imgIndex:{
type: Number,
default: 0,
}
});
const emits = defineEmits(['openEditor']);
@ -42,7 +46,8 @@ const priviewImg = (value) => {
const showeditor = () => {
emits('openEditor', {
src:props.src,
type:props.type
type:props.type,
imgIndex:props.imgIndex
});
}
</script>

View File

@ -14,10 +14,18 @@ const prosp=defineProps({
type:String,
default:''
},
imgIndex:{
type:Number,
default:0
},
imgType:{
type:String,
default:''
},
dpmasId:{
type:String,
default:'',
},
caseId:{
type:String,
default:'',
@ -27,6 +35,8 @@ const prosp=defineProps({
default:()=>{},
}
})
const uploadImgSrc=ref('');
const emit=defineEmits(['freshDetail'])
// tui-image-editor
const locale_zh = {
@ -184,27 +194,59 @@ const customTheme = {
};
const instance = ref(null);
const HandleMainDiagnoseImg=()=>{
let obj=props.caseObj.mainDiagnose;
obj.mainDiagnoseImg=uploadImgSrc.value;
caseplatformCaseApi.updateMainDiagnose({
caseId:current_caseId.value,
mainDiagnose:JSON.stringify(caseVO.value.mainDiagnose)
mainDiagnose:JSON.stringify(obj)
}).then(res=>{
message.success('保存成功')
})
};
const HandleDpmasImg=(dmpsId)=>{
let dpmasList = props.caseObj.dpmas;
let dpmasIndex=0;
for (let i = 0; i < dpmasList.length; i++) {
if(dpmasList[i].dpmasId==props.dpmasId){
dpmasIndex=i;
break;
}
}
let newImgList = dpmasList[dpmasIndex].dpmasImg.split(',');
newImgList[imgIndex]=uploadImgSrc.value;
let dpmasImg='';
newImgList.forEach(item=>{
if(dpmasImg){
dpmasImg+=','+item;
}else{
dpmasImg=item
}
})
caseplatformCaseApi.updateDpmas({
caseId:current_caseId.value,
dmpsId:dmpsId,
caseId:props.caseId,
dmpsId:props.dmpsId,
dpmasImg:dpmasImg
}).then(res=>{
message.success('保存成功')
})
};
const HandleCheckImg=(dmpsId)=>{
const HandleCheckImg=()=>{
let newImgList=props.caseObj.checkImg.split(',');
newImgList[imgIndex]=uploadImgSrc.value;
let checkImg='';
newImgList.forEach(item=>{
if(checkImg){
checkImg+=','+item;
}else{
checkImg=item
}
})
caseplatformCaseApi.updatecheck({
caseId:current_caseId.value,
dmpsId:dmpsId,
checkImg:checkImg
caseId:props.caseId,
checkImg:checkImg
}).then(res=>{
message.success('保存成功')
})
@ -214,11 +256,28 @@ const getImageFormat=(imageUrl)=>{
var parts = imageUrl.split('.');
return parts[parts.length - 1];
};
const getOss=()=>{
caseplatformCaseApi.getOssSign(1).then(res=>{
const getImg=(file)=>{
return new Promise((resolve, reject) => {
caseplatformCaseApi.getOssSign(1).then(res=>{
let { accessid, dir,policy,signature,host} = res;
let imgUrl = file;
let filename = FileUtil.UUID()+'.'+this.getImageFormat(imgUrl);
let formData = new FormData();
formData.append('OSSAccessKeyId', access_id);
formData.append('policy', policy);
formData.append('signature', signature);
formData.append('key', dir + time + random +imgType);
formData.append('file', file, filename);
formData.append('success_action_status',200);
caseplatformCaseApi.ossUpload(host,formData).then(res => {
resolve(host+"/"+ dir + time + random + imgType);
}).catch((err) => {
message.error('上传失败')
})
})
})
}
const save = () => {
instance.value.resetZoom();
@ -234,9 +293,13 @@ const save = () => {
// fileToBase64(file).then((res) => {
// newSrc.value = res;
// });
if(props.imgType==='mainDiagnose'){
HandleMainDiagnoseImg();
}
this.getImg(blob).then(res=>{
uploadImgSrc.value=res;
if(props.imgType==='mainDiagnose'){
HandleMainDiagnoseImg();
}
})
};
const fileToBase64 = (file) => {

View File

@ -118,25 +118,12 @@
$smartEnumPlugin.getDescByValue('CASESettlementFlag', text)
}}</a-tag>
</template>
<!-- <template v-if="column.dataIndex === 'action'">
<template v-if="column.dataIndex === 'action'">
<div class="smart-table-operate">
<a-button @click="showForm(record.id)" type="link" v-privilege="'case-system:case:select'">查看</a-button>
<span v-privilege="'case-system:case:examine'">
<a-popconfirm title="请选择审核结果" placement="topRight" ok-text="审核通过" cancel-text="审核不通过"
@confirm="confirmExamine(record)" @cancel="cancelExamine(record)" v-if="record.status == 0">
<a-button type="link">审核</a-button>
</a-popconfirm>
</span>
<a-button v-if="record.status == 2" @click="showReason(record.reason)" type="link" v-privilege="'case-system:case:reason'">原因</a-button>
<span v-privilege="'case-system:case:settlement'">
<a-popconfirm title="确认结算?" placement="topRight" ok-text="结算" cancel-text="取消"
@confirm="settlement(record.id)" v-if="record.status == 1 && record.settlementFlag == 0">
<a-button type="link">结算</a-button>
</a-popconfirm>
</span>
<a-button type="link" :href="record.signLinkPc" v-if="record.signLinkPc && record.signStatus==1">协议地址</a-button>
<a-button @click="delDoctor(record.id)" type="link" danger>删除</a-button>
</div>
</template> -->
</template>
</template>
</a-table>
<!---------- 表格 end ----------->
@ -215,12 +202,12 @@ const columns = ref([
width: 100,
},
// {
// title: '',
// dataIndex: 'action',
// fixed: 'right',
// width: 155,
// },
{
title: '操作',
dataIndex: 'action',
fixed: 'right',
width: 155,
},
]);
const uploadMethod=(file)=>{
SmartLoading.show();
@ -248,6 +235,25 @@ const uploadMethod=(file)=>{
message.error(`上传失败`);
}
}
const delDoctor=(id)=>{
Modal.confirm({
title: '确认删除?',
content: '确定要删除该医生吗?',
okText: '确认',
cancelText: '取消',
onOk(){
SmartLoading.show();
manageApi.delDoctor(id).then((res)=>{
message.success(`删除成功`);
queryData();
SmartLoading.hide();
}).catch((err)=>{
smartSentry.captureError(err);
SmartLoading.hide();
})
}
});
}
// ---------------------------- ----------------------------
const queryFormState = {

View File

@ -0,0 +1,689 @@
<!--
* 病例表
*
* @Author: HMM
* @Date: 2024-01-11 15:18:32
* @Copyright gdxz
-->
<template>
<div class="con">
<a-drawer :title="'查看'" width="75%" :visible="visibleFlag" @cancel="onClose" @close="onClose" :maskClosable="true" :destroyOnClose="true">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="基本信息">
<a-descriptions title="" bordered>
<a-descriptions-item label="患者姓名 " class="required">{{ caseVO.name ? caseVO.name : '--' }}</a-descriptions-item>
<a-descriptions-item label="患者ID " class="required">{{ caseVO.uid ? caseVO.uid : '--' }}</a-descriptions-item>
<a-descriptions-item label="性别 " class="required">{{ $smartEnumPlugin.getDescByValue('GENDER_ENUM', caseVO.sex) }}</a-descriptions-item>
<a-descriptions-item label="年龄 " class="required">{{ caseVO.age ? caseVO.age : '--' }}</a-descriptions-item>
<a-descriptions-item label="入院时间 " :span="2" class="required">{{
caseVO.admissionTime ? caseVO.admissionTime : '--'
}}</a-descriptions-item>
<a-descriptions-item label="治疗类型(多选) " :span="3" class="required">
<a-checkbox-group v-model:value="caseVO.caseType">
<a-checkbox v-for="item in caseTypeOption" :key="item.name" :value="item.value" disabled>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</a-descriptions-item>
<a-descriptions-item label="主要诊断" :span="3" class="required">
<div class="row">类型多选</div>
<div class="row">
<a-checkbox-group v-model:value="caseVO.mainDiagnose.select">
<a-checkbox v-for="item in diagnoseOption" :key="item.name" :value="item.value" disabled>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</div>
<div class="row" v-if="caseVO.mainDiagnose.otherValue">其他</div>
<div class="row" v-if="caseVO.mainDiagnose.otherValue">
{{ caseVO.mainDiagnose.otherValue }}
</div>
<div class="row">出院诊断照片</div>
<div class="row flex" v-show="caseVO.mainDiagnose.mainDiagnoseImg.split(',').length > 0">
<imgCell
v-for="img in caseVO.mainDiagnose.mainDiagnoseImg.split(',')"
:src="img.indexOf('http') > -1 ? img : fileHost + img"
@openEditor="openEditor"
></imgCell>
</div>
</a-descriptions-item>
<a-descriptions-item label="患病原因" :span="3" class="required">
<div class="row">类型多选</div>
<div class="row">
<a-checkbox-group v-model:value="caseVO.diseaseCause.select">
<a-checkbox v-for="item in patientSickOption" :key="item.name" :value="item.value" disabled>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</div>
<div class="row" v-if="caseVO.diseaseCause.otherValue">其他</div>
<div class="row" v-if="caseVO.diseaseCause.otherValue">{{ caseVO.diseaseCause.otherValue }}</div>
</a-descriptions-item>
<a-descriptions-item label="诱因" :span="3" v-if="caseVO.seductionReason">
<div class="row" v-if="caseVO.seductionReason.inside">肝内类型多选</div>
<div class="row" v-if="caseVO.seductionReason.inside">
<a-checkbox-group v-model:value="caseVO.seductionReason.inside.select">
<a-checkbox v-for="item in ganneiOption" :key="item.name" :value="item.value" disabled>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</div>
<div class="row" v-if="caseVO.seductionReason.inside && caseVO.seductionReason.inside.otherValue">肝内其他</div>
<div class="row" v-if="caseVO.seductionReason.inside && caseVO.seductionReason.inside.otherValue">
{{ caseVO.seductionReason.inside.otherValue }}
</div>
<div class="row" v-if="caseVO.seductionReason.outside">肝外类型多选</div>
<div class="row" v-if="caseVO.seductionReason.inside">
<a-checkbox-group v-model:value="caseVO.seductionReason.outside.select">
<a-checkbox v-for="item in ganwaiOption" :key="item.name" :value="item.value" disabled>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</div>
<div class="row" v-if="caseVO.seductionReason.outside && caseVO.seductionReason.outside.otherValue">肝外其他</div>
<div class="row" v-if="caseVO.seductionReason.outside && caseVO.seductionReason.outside.otherValue">
{{ caseVO.seductionReason.outside.otherValue }}
</div>
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="2" tab="临床资料" force-render>
<!-- <span style="font-size: 15px; color: rgb(131, 130, 130)">
<exclamation-circle-outlined style="color: chocolate; margin-bottom: 20px" /> 文字/图片(至少上传一项)</span
> -->
<a-descriptions title="" bordered>
<a-descriptions-item label="临床摘要" :span="3" style="white-space: pre-wrap" class="required">
<div class="row" v-html="caseVO.abstractStr ? caseVO.abstractStr : '--'"></div>
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="3" tab="DPMAS">
<a-descriptions
:column="2"
:title="'第' + (index + 1) + '次治疗'"
bordered
v-for="(dpm, index) in caseVO.dpmas"
style="margin-bottom: 20px"
>
<a-descriptions-item label="治疗时间 " :span="2" class="required">
{{ dpm.treatTime }}
</a-descriptions-item>
<a-descriptions-item label="治疗内容 " :span="2" class="required" v-if="dpm">
<div class="row">1模式单选</div>
<div class="desc">
<a-radio-group v-model:value="dpm.content.mode.select">
<a-radio :value="cell.value" disabled v-for="cell in moshiOption">{{ cell.name }}</a-radio>
</a-radio-group>
</div>
<div class="desc" v-if="dpm.content.mode.otherValue">其他</div>
<div class="desc" v-if="dpm.content.mode.otherValue">{{ dpm.content.mode.otherValue }}</div>
<div class="row">
2血浆吸附处理量<span class="dot">{{ dpm.content.plasma.handle }}</span
>ml血浆置换量<span class="dot">{{ dpm.content.plasma.replace }}</span
>ml
</div>
<div class="row">3抗凝剂量(选填)</div>
<div class="desc">
<a-checkbox-group v-model:value="dpm.content.dose.select">
<a-row>
<a-checkbox value="1"
disabled
>肝素首剂<span class="dot">
{{ formatValue(dpm.content.dose.heparin.firstDose) }}
</span
><a-radio-group style="margin-left: 8px;" v-model:value="dpm.content.dose.heparin.firstDoseUnit">
<a-radio value="1" disabled>IU</a-radio><a-radio value="2" disabled>mg</a-radio></a-radio-group> 追加<span class="dot">{{ formatValue(dpm.content.dose.heparin.append) }}</span
><a-radio-group style="margin-left: 8px;" v-model:value="dpm.content.dose.heparin.appendUnit">
<a-radio value="1" disabled>IU</a-radio>
<a-radio value="2" disabled>mg</a-radio>
</a-radio-group></a-checkbox
>
</a-row>
<a-row>
<a-checkbox value="2" disabled
>低分子肝素<span class="dot">{{ formatValue(dpm.content.dose.lowHeparin.value) }}</span
>IU</a-checkbox
>
</a-row>
<a-row>
<a-checkbox value="3" disabled
>枸橼酸血液流速<span class="dot">{{ formatValue(dpm.content.dose.citricAcid.bloodFlowRate) }}</span
>ml/min枸橼酸钠流速<span class="dot">{{ formatValue(dpm.content.dose.citricAcid.citricAcidFlowRate) }}</span
>ml/h钙剂<span>
<a-radio-group style="margin-left: 8px;" v-model:value="dpm.content.dose.citricAcid.calciumAgent.select">
<a-radio :value="1" disabled>10%葡萄糖酸钙</a-radio>
<a-radio :value="2" disabled>5%氯化钙</a-radio>
</a-radio-group> </span
><span class="dot">{{ formatValue(dpm.content.dose.citricAcid.calciumAgent.value) }}</span
>ml/h</a-checkbox
>
</a-row>
<a-row>
<a-checkbox value="4" disabled
>甲磺酸萘莫司他维持量<span class="dot">{{ formatValue(dpm.content.dose.nafamostat.value) }}</span
>mg/h</a-checkbox
>
</a-row>
<a-row>
<a-checkbox value="-1" disabled
>其他名称<span class="dot other">{{ formatValue(dpm.content.dose.other.name) }}</span
>&nbsp;&nbsp;剂量:<span class="dot other">{{ formatValue(dpm.content.dose.other.name) }}</span
></a-checkbox
>
</a-row>
</a-checkbox-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="治疗图片 " :span="2" class="required">
<div class="row flex">
<imgCell
v-for="img in dpm.dpmasImg.split(',')"
:src="img.indexOf('http') > -1 ? img : fileHost + img"
@openEditor="openEditor"
></imgCell>
</div>
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="4" tab="实验室检测">
<a-descriptions title="" bordered :column="caseVO.dpmas.length>1?3:2">
<a-descriptions-item label="首次治疗前检测时间 " :span="3" class="required">
{{ caseVO.headTime }}
</a-descriptions-item>
<a-descriptions-item label="首次治疗后检测时间 " :span="3" class="required">
{{ caseVO.afterTime }}
</a-descriptions-item>
<a-descriptions-item label="最后一次治疗后检测时间 " :span="3" class="required" v-if="caseVO.dpmas.length>1">
{{ caseVO.lastTime }}
</a-descriptions-item>
<a-descriptions-item label="首次治疗前总胆红素" class="required">{{ caseVO.headTb ? caseVO.headTb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item label="首次治疗后总胆红素" class="required">{{ caseVO.afterTb ? caseVO.afterTb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后总胆红素" class="required"
>{{ caseVO.lastTb ? caseVO.lastTb : '--' }} umol/L</a-descriptions-item
>
<a-descriptions-item label="首次治疗前直接胆红素">{{ caseVO.headDb ? caseVO.headDb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item label="首次治疗后直接胆红素">{{ caseVO.afterDb ? caseVO.afterDb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后直接胆红素">{{ caseVO.lastDb ? caseVO.lastDb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item label="首次治疗前间接胆红素">{{ caseVO.headIb ? caseVO.headIb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item label="首次治疗后间接胆红素">{{ caseVO.afterIb ? caseVO.afterIb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后间接胆红素">{{ caseVO.lastIb ? caseVO.lastIb : '--' }} umol/L</a-descriptions-item>
<a-descriptions-item label="首次治疗前丙氨酸氨基转移酶" class="required"
>{{ caseVO.headAlt ? caseVO.headAlt : '--' }} U/L</a-descriptions-item
>
<a-descriptions-item label="首次治疗后丙氨酸氨基转移酶" class="required"
>{{ caseVO.afterAlt ? caseVO.afterAlt : '--' }} U/L</a-descriptions-item
>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后丙氨酸氨基转移酶" class="required"
>{{ caseVO.lastAlt ? caseVO.lastAlt : '--' }} U/L</a-descriptions-item
>
<a-descriptions-item label="首次治疗前天门冬氨酸氨基转移酶" class="required"
>{{ caseVO.headAst ? caseVO.headAst : '--' }} U/L</a-descriptions-item
>
<a-descriptions-item label="首次治疗后天门冬氨酸氨基转移酶" class="required"
>{{ caseVO.afterAst ? caseVO.afterAst : '--' }} U/L</a-descriptions-item
>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后天门冬氨酸氨基转移酶" class="required"
>{{ caseVO.lastAst ? caseVO.lastAst : '--' }} U/L</a-descriptions-item
>
<a-descriptions-item label="首次治疗前白蛋白" class="required">{{ caseVO.headAlb ? caseVO.headAlb : '--' }} g/L</a-descriptions-item>
<a-descriptions-item label="首次治疗后白蛋白" class="required">{{ caseVO.afterAlb ? caseVO.afterAlb : '--' }} g/L</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后白蛋白" class="required">{{ caseVO.lastAlb ? caseVO.lastAlb : '--' }} g/L</a-descriptions-item>
<a-descriptions-item label="首次治疗前凝血酶原活动度">{{ caseVO.headPta ? caseVO.headPta : '--' }} %</a-descriptions-item>
<a-descriptions-item label="首次治疗后凝血酶原活动度">{{ caseVO.afterPta ? caseVO.afterPta : '--' }} %</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后凝血酶原活动度">{{ caseVO.lastPta ? caseVO.lastPta : '--' }} %</a-descriptions-item>
<a-descriptions-item label="首次治疗前国际标准化比值 " class="required"
>{{ caseVO.headInr ? caseVO.headInr : '--' }} INR</a-descriptions-item
>
<a-descriptions-item label="首次治疗后国际标准化比值 " class="required"
>{{ caseVO.afterInr ? caseVO.afterInr : '--' }} INR</a-descriptions-item
>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后国际标准化比值 " class="required"
>{{ caseVO.lastInr ? caseVO.lastInr : '--' }} INR</a-descriptions-item
>
<a-descriptions-item label="首次治疗前C反应蛋白">{{ caseVO.headCrp ? caseVO.headCrp : '--' }} ng/L</a-descriptions-item>
<a-descriptions-item label="首次治疗后C反应蛋白">{{ caseVO.afterCrp ? caseVO.afterCrp : '--' }} ng/L</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后C反应蛋白">{{ caseVO.lastCrp ? caseVO.lastCrp : '--' }} ng/L</a-descriptions-item>
<a-descriptions-item label="首次治疗前白介素6">{{ caseVO.headIl6 ? caseVO.headIl6 : '--' }} {{formatIl6Unit(caseVO.il6Unit)}}</a-descriptions-item>
<a-descriptions-item label="首次治疗后白介素6">{{ caseVO.afterIl6 ? caseVO.afterIl6 : '--' }}{{formatIl6Unit(caseVO.il6Unit)}}</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后 白介素6">{{ caseVO.lastIl6 ? caseVO.lastIl6 : '--' }}{{formatIl6Unit(caseVO.il6Unit)}}</a-descriptions-item>
<a-descriptions-item label="首次治疗前肿瘤坏死因子α">{{ caseVO.headTnf ? caseVO.headTnf : '--' }} μg/L</a-descriptions-item>
<a-descriptions-item label="首次治疗后肿瘤坏死因子α">{{ caseVO.afterTnf ? caseVO.afterTnf : '--' }} μg/L</a-descriptions-item>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后肿瘤坏死因子α">{{ caseVO.lastTnf ? caseVO.lastTnf : '--' }} μg/L</a-descriptions-item>
<a-descriptions-item label="图片 " :span="2" class="required">
<div class="row flex">
<imgCell
v-for="img in caseVO.checkImg.split(',')"
:src="img.indexOf('http') > -1 ? img : fileHost + img"
@openEditor="openEditor"
></imgCell>
</div>
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="5" tab="疾病转归">
<a-descriptions title="" bordered :column="4">
<a-descriptions-item label="出院时间 " :span="3" class="required">
{{ caseVO.dischargeTime }}
</a-descriptions-item>
<a-descriptions-item label="出院天数 " :span="3" class="required">
{{ caseVO.day }}
</a-descriptions-item>
<a-descriptions-item label="出院情况 " :span="6" class="required">
{{ caseVO.dischargeSituation }}
</a-descriptions-item>
<a-descriptions-item label="出院状态(单选)" :span="6" class="required">
<a-radio-group v-model:value="caseVO.dischargeStatus">
<a-radio :value="item.value" disabled v-for="item in hospitalOption">{{ item.name }}</a-radio>
</a-radio-group>
</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
</a-tabs>
<template #footer>
<a-space v-if="caseVO.status == 0">
<a-button @click="cancelExamine">审核拒绝</a-button>
<a-button type="primary" @click="examine">审核通过</a-button>
</a-space>
</template>
</a-drawer>
<a-modal v-model:visible="cancelExamineVisible" title="输入原因" @ok="submitCancelExamine">
<a-textarea v-model:value="current_reason" placeholder="输入不通过原因" :auto-size="{ minRows: 2, maxRows: 8 }" />
</a-modal>
</div>
<a-modal v-model:visible="showEdit" title="编辑图片" width="100%" wrap-class-name="my-full-modal" @ok="handleOk">
<div class="editorcon">
<!-- <a-image
:width="200"
:src="newSrc"
/> -->
<div class="save" @click="save">
<a-button type="primary" shape="round">
<template #icon>
<save-outlined />
</template>
保存
</a-button>
</div>
<imgEditor ref="imgEditorRef" v-if="showEdit"></imgEditor>
</div>
</a-modal>
</template>
<script setup>
import { nextTick, ref } from 'vue';
import { message, Modal } from 'ant-design-vue';
import _ from 'lodash';
import { SmartLoading } from '/@/components/framework/smart-loading';
import { caseplatformCaseApi } from '/@/api/business/case/caseplatform-case-api';
import { smartSentry } from '/@/lib/smart-sentry';
// import imgCell from './imgCell.vue';
// import imgEditor from './imgEditor.vue';
// import {il6Unit, caseTypeOption, diagnoseOption, patientSickOption, ganneiOption, ganwaiOption, moshiOption, kangningOption, hospitalOption } from './data';
// // ---------------- -------- ------------------------
const imgEditorRef = ref(null);
const showEdit = ref(false);
const emits = defineEmits(['reloadList']);
const cancelExamineVisible = ref(false);
const fileHost = import.meta.env.VITE_APP_FILE_HOST;
const fallbackImg =
'data:image/png;base64,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';
const activeKey = ref('1');
const current_reason = ref();
const current_caseId = ref();
const caseVO = ref({
name: undefined,
uid: undefined,
sex: undefined,
age: undefined,
admissionTime: undefined,
caseType: undefined,
mainDiagnose: {
select: [],
otherValue: '',
mainDiagnoseImg: '',
},
diseaseCause: {
select: [],
otherValue: '',
},
seductionReason: {
//
inside: {
select: [],
otherValue: '',
},
outside: {
select: [],
otherValue: '',
},
},
abstractStr: undefined,
dpmas: [
{
treatTime: '',
content: {
mode: {
//
select: '',
otherValue: '',
},
plasma: {
//
handle: '',
replace: '',
},
dose: {
//
select: [],
heparin: {
//
firstDose: '', //
append: '', //
},
lowHeparin: {
//
value: '',
},
citricAcid: {
//
bloodFlowRate: '', //
citricAcidFlowRate: '', //
calciumAgent: {
//
select: '',
value: '',
},
},
nafamostat: {
//
value: '',
},
other: {
//
name: '',
dose: '',
},
},
},
dpmasImg: '',
},
],
headTime: undefined,
afterTime: undefined,
lastTime: undefined,
headTb: undefined,
afterTb: undefined,
lastTb: undefined,
headAlb: undefined,
afterAlb: undefined,
lastAlb: undefined,
headDb: undefined,
afterDb: undefined,
lastDb: undefined,
headPta: undefined,
afterPta: undefined,
lastPta: undefined,
headIb: undefined,
afterIb: undefined,
lastIb: undefined,
headInr: undefined,
afterInr: undefined,
lastInr: undefined,
headAlt: undefined,
afterAlt: undefined,
lastAlt: undefined,
headIl6: undefined,
afterIl6: undefined,
lastIl6: undefined,
headAst: undefined,
afterAst: undefined,
lastAst: undefined,
headTnf: undefined,
afterTnf: undefined,
lastTnf: undefined,
headCrp: undefined,
afterCrp: undefined,
lastCrp: undefined,
checkImg: '',
dischargeSituation: '',
dischargeTime: '',
dischargeStatus: '',
day: null,
});
// ------------------------ ------------------------
//
const visibleFlag = ref(false);
function show(id) {
getDetail(id);
current_caseId.value = id;
visibleFlag.value = true;
}
function onClose() {
visibleFlag.value = false;
activeKey.value = '1';
}
const formatJson = (obj) => {
for (const key in obj) {
if (key == 'mainDiagnose' || key == 'diseaseCause' || key == 'caseType') {
obj[key] = JSON.parse(obj[key]);
}
if (key == 'seductionReason') {
obj.seductionReason = JSON.parse(obj.seductionReason);
}
if (key == 'dpmas') {
for (let index = 0; index < obj.dpmas.length; index++) {
const element = obj.dpmas[index];
element.content = JSON.parse(element.content);
if(!element.content.dose){
element.content.dose={
//
select: [],
heparin: {
//
firstDose: '', //
append: '', //
},
lowHeparin: {
//
value: '',
},
citricAcid: {
//
bloodFlowRate: '', //
citricAcidFlowRate: '', //
calciumAgent: {
//
select: '',
value: '',
},
},
nafamostat: {
//
value: '',
},
other: {
//
name: '',
dose: '',
},
}
}
}
}
}
return obj;
};
//
async function examine() {
Modal.confirm({
title: '提示',
content: '确定要审核通过吗?',
okText: '确认',
okType: 'danger',
onOk() {
SmartLoading.show();
try {
console.log(current_caseId.value);
caseplatformCaseApi.examine(current_caseId.value, 1);
message.success('操作成功');
} catch (e) {
console.log(e);
} finally {
SmartLoading.hide();
visibleFlag.value = false;
emits('reloadList');
}
},
cancelText: '取消',
onCancel() {},
});
}
//
const formatValue = (val) => {
if (!val) {
return '--';
} else {
return val;
}
};
const formatIl6Unit = (val) => {
if(!val){
return 'ng/l'
}else{
let arr=il6Unit.filter(item=>{
return item.value==val;
})
return arr[0].name
}
}
//
async function submitCancelExamine() {
SmartLoading.show();
try {
await caseplatformCaseApi.cancelExamine({ caseId: current_caseId.value, reason: current_reason.value });
message.success('操作成功');
} catch (e) {
console.log(e);
} finally {
cancelExamineVisible.value = false;
current_reason.value = undefined;
current_caseId.value = undefined;
visibleFlag.value = false;
SmartLoading.hide();
emits('reloadList');
}
}
function cancelExamine() {
cancelExamineVisible.value = true;
}
// ------------------------ ------------------------
async function getDetail(id) {
SmartLoading.show();
try {
let queryResult = await caseplatformCaseApi.getDetail(id);
caseVO.value = formatJson(queryResult.data);
console.log(caseVO.value);
} catch (err) {
smartSentry.captureError(err);
} finally {
SmartLoading.hide();
}
}
const openEditor = (data) => {
showEdit.value = true;
nextTick(() => {
imgEditorRef.value?.init(data);
});
};
const saveEditor = () => {
imgEditorRef.value?.save();
};
const handleOk = () => {
showEdit.value = false;
};
defineExpose({
show,
});
</script>
<style lang="less" scoped>
:deep(.ant-image) {
margin: 0 0 10px 10px;
}
:deep(th.required:after) {
display: inline-block;
margin-right: 4px;
color: #ff4d4f;
font-size: 14px;
font-family: SimSun, sans-serif;
line-height: 1;
content: '*';
}
.imgbox {
display: flex;
}
.desc {
margin-left: 20px;
}
.desc .dot,
.row .dot {
// text-decoration: underline;
color: #1890ff;
font-size: 16px;
display: inline-block;
min-width: 30px;
line-height: 25px;
border-bottom:1px solid #1890ff;
text-align: center;
}
.row .other,.desc .other {
font-size: 14px;
}
:deep(.ant-radio-disabled.ant-radio-inner::after) {
background: #1890ff;
}
:deep(.ant-radio-disabled.ant-radio-inner) {
border-color: #1890ff;
}
:deep(.ant-descriptions-item-content) {
padding: 16px 13px !important;
}
:deep(.ant-checkbox-wrapper + .ant-checkbox-wrapper) {
margin-left: 0 !important;
}
.row :deep(p) {
padding: 0;
margin: 0;
}
:deep(.ant-descriptions-item-label){
max-width: 140px;
}
:deep(.ant-checkbox-checked .ant-checkbox-inner),:deep(.ant-radio-checked .ant-radio-inner){
background-color: #1890ff;
border-color: #1890ff;
}
:deep(.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after),:deep(.ant-radio-disabled.ant-radio-checked .ant-radio-inner::after){
border-color:#fff;
}
:deep(.ant-checkbox-disabled + span),:deep(.ant-radio-disabled + span){
color:#333;
}
:deep(.ant-radio-disabled .ant-radio-inner::after) {
background-color: #fff;
}
.flex{
display: flex;
}
</style>

View File

@ -0,0 +1,328 @@
<!--
* 病例表
*
* @Author: HMM
* @Date: 2024-01-11 15:18:32
* @Copyright gdxz
-->
<template>
<!---------- 查询表单form begin ----------->
<a-form class="smart-query-form" style="border-radius: 10px; padding: 10px 10px">
<a-row class="smart-query-form-row">
<a-form-item label="" class="smart-query-form-item">
<a-input style="width: 200px" v-model:value="queryForm.expertName" placeholder="请输入姓名" />
</a-form-item>
<a-form-item label="" class="smart-query-form-item">
<a-range-picker :valueFormat="dateFormat" v-model:value="queryForm.createTime" :disabled-date="disabledDate"/>
</a-form-item>
<!-- <a-form-item label="" class="smart-query-form-item">
<a-select style="width: 150px;" @change="provChange" placeholder="选择省份" v-model:value="queryForm.provId"
:allowClear="true">
<a-select-option :value="prov.id" v-for="prov in provList">{{ prov.name }}</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="" class="smart-query-form-item">
<a-select style="width: 150px;" placeholder="选择市区" @change="cityChange" v-model:value="queryForm.cityId"
:allowClear="true">
<a-select-option :value="city.id" v-for="city in cityList">{{ city.name }}</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="" class="smart-query-form-item">
<a-select style="width: 250px;" placeholder="选择医院" v-model:value="queryForm.hospitalUuid"
:allowClear="true">
<a-select-option :value="hospital.uuid" v-for="hospital in hospitalList">{{ hospital.name
}}</a-select-option>
</a-select>
</a-form-item> -->
<a-form-item class="smart-query-form-item">
<a-button type="primary" @click="queryData">
<template #icon>
<SearchOutlined />
</template>
查询
</a-button>
</a-form-item>
</a-row>
</a-form>
<!---------- 查询表单form end ----------->
<a-card size="small" :bordered="false" :hoverable="true" style="border-radius: 10px">
<!---------- 表格操作行 begin ----------->
<a-row class="smart-table-btn-block">
<div class="smart-table-operate-block">
<a-typography-title :level="5">活动申请管理</a-typography-title>
<!-- <a-button @click="showForm()" type="primary" size="small">
<template #icon>
<PlusOutlined />
</template>
新建
</a-button> -->
</div>
<div class="smart-table-setting-block">
<TableOperator v-model="columns" :tableId="null" :refresh="queryData" />
</div>
</a-row>
<!---------- 表格操作行 end ----------->
<!---------- 表格 begin ----------->
<a-table size="small" :dataSource="tableData" :columns="columns" rowKey="id" bordered :loading="tableLoading" :pagination="false">
<template #bodyCell="{ text, record, column }">
<template v-if="column.dataIndex === 'createTime'">
<span>{{ text.substring(0, 11) }}</span>
</template>
<template v-if="column.dataIndex === 'expertProvName'">
<span>{{record.expertProvName+record.expertCityName }}</span>
</template>
<template v-if="column.dataIndex === 'action'">
<div class="smart-table-operate">
<a-button @click="delActivity(record.id)" type="link" danger>删除</a-button>
</div>
</template>
</template>
</a-table>
<!---------- 表格 end ----------->
<div class="smart-query-table-page">
<a-pagination
showSizeChanger
showQuickJumper
show-less-items
:pageSizeOptions="PAGE_SIZE_OPTIONS"
:defaultPageSize="queryForm.pageSize"
v-model:current="queryForm.pageNum"
v-model:pageSize="queryForm.pageSize"
:total="total"
@change="queryData"
@showSizeChange="queryData"
:show-total="(total) => `共${total}条`"
/>
</div>
<!-- <manageForm ref="formRef" @reloadList="queryData" /> -->
</a-card>
<br />
</template>
<script setup>
import dayjs from 'dayjs';
import { reactive, ref, onMounted } from 'vue';
import { message, Modal } from 'ant-design-vue';
import { SmartLoading } from '/@/components/framework/smart-loading';
import { activityApi } from '/@/api/system/activity/activity-api';
import { PAGE_SIZE_OPTIONS } from '/@/constants/common-const';
import { smartSentry } from '/@/lib/smart-sentry';
import TableOperator from '/@/components/support/table-operator/index.vue';
import SmartEnumSelect from '/@/components/framework/smart-enum-select/index.vue';
import manageForm from './form.vue';
import { areaApi } from '/@/api/business/area/area-api';
import { statisticsApi } from '/@/api/business/case/statistics-api';
import { employeeApi } from '/@/api/system/employee/employee-api';
// ---------------------------- ----------------------------
const dateFormat = 'YYYY-MM-DD HH:mm:ss'
const headers=reactive({
'Content-Type': 'multipart/form-data'
});
function showReason(reason) {
showReasonVisible.value = true;
show_reason.value = reason;
}
const columns = ref([
{
title: '姓名',
dataIndex: 'expertName',
ellipsis: true,
},
{
title: '地区',
dataIndex: 'expertProvName',
ellipsis: true,
},
{
title: '医院',
dataIndex: 'expertHospitalName',
ellipsis: true,
},
{
title: '创建时间',
dataIndex: 'createTime',
ellipsis: true,
width: 100,
},
{
title: '操作',
dataIndex: 'action',
fixed: 'right',
width: 155,
},
]);
const handleChange = (info) => {
console.log(info);
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
}
if (info.file.status === 'done') {
message.success(`上传成功`);
queryData();
} else if (info.file.status === 'error') {
message.error(`上传失败`);
}
}
const delActivity=(id)=>{
Modal.confirm({
title: '确认删除?',
content: '确定要删除该记录?',
okText: '确认',
cancelText: '取消',
onOk(){
SmartLoading.show();
activityApi.delActivity(id).then((res)=>{
message.success(`删除成功`);
queryData();
SmartLoading.hide();
}).catch((err)=>{
smartSentry.captureError(err);
SmartLoading.hide();
})
}
});
}
// ---------------------------- ----------------------------
const queryFormState = {
name: undefined, //name
pageNum: 1,
pageSize: 10,
};
const formatJson = (obj) => {
if (!obj) return [];
return JSON.parse(obj);
};
// form
const queryForm = reactive({ ...queryFormState });
// loading
const tableLoading = ref(false);
//
const tableData = ref([]);
//
const total = ref(0);
//
function resetQuery() {
let pageSize = queryForm.pageSize;
Object.assign(queryForm, queryFormState);
queryForm.pageSize = pageSize;
queryData();
}
//
async function queryData() {
tableLoading.value = true;
try {
let queryResult = await activityApi.queryPage(queryForm);
tableData.value = queryResult.data.list;
total.value = queryResult.data.total;
} catch (e) {
smartSentry.captureError(e);
} finally {
tableLoading.value = false;
}
}
function provChange(e) {
console.log(e);
queryForm.cityId = undefined;
queryForm.hospitalUuid = undefined;
cityList.value = [];
hospitalList.value = [];
if (e) {
getCity(e);
getHospitalList({ provId: e });
}
}
function cityChange(e) {
console.log(e);
queryForm.hospitalUuid = undefined;
hospitalList.value = [];
if (e) {
getHospitalList({ cityId: e });
}
}
const provList = ref();
//
async function getProvList() {
SmartLoading.show();
try {
let queryResult = await employeeApi.getRoleProv();
provList.value = queryResult.data;
} catch (e) {
smartSentry.captureError(e);
} finally {
SmartLoading.hide();
}
}
const cityList = ref();
//
async function getCity(parent) {
SmartLoading.show();
try {
let queryResult = await areaApi.cityList(parent);
cityList.value = queryResult.data;
} catch (e) {
smartSentry.captureError(e);
} finally {
SmartLoading.hide();
}
}
const hospitalList = ref();
//
async function getHospitalList(param) {
SmartLoading.show();
try {
let queryResult = await statisticsApi.getHospitalList(param);
hospitalList.value = queryResult.data;
} catch (e) {
smartSentry.captureError(e);
} finally {
SmartLoading.hide();
}
}
onMounted(() => {
getProvList();
queryData();
});
// ---------------------------- / ----------------------------
const formRef = ref();
const showForm=(data)=> {
formRef.value.show(data);
}
</script>