This commit is contained in:
zoujiandong 2025-07-10 20:46:56 +08:00
parent d6bdabc210
commit 1b2a2a0f4f
4 changed files with 189 additions and 162 deletions

View File

@ -16,7 +16,7 @@
<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 : '--'
caseVO.admissionTime ? formateDate(caseVO.admissionTime) : '--'
}}</a-descriptions-item>
<a-descriptions-item label="治疗类型(多选) " :span="3" class="required">
@ -99,7 +99,7 @@
>
<a-descriptions-item label="治疗时间 " :span="2" class="required">
{{ dpm.treatTime }}
{{ formateDate(dpm.treatTime) }}
</a-descriptions-item>
<a-descriptions-item label="治疗内容 " :span="2" class="required" v-if="dpm">
<div class="row">1模式单选</div>
@ -186,13 +186,13 @@
<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 }}
{{ formateDate(caseVO.headTime) }}
</a-descriptions-item>
<a-descriptions-item label="首次治疗后检测时间 " :span="3" class="required">
{{ caseVO.afterTime }}
{{ formateDate(caseVO.afterTime) }}
</a-descriptions-item>
<a-descriptions-item label="最后一次治疗后检测时间 " :span="3" class="required" v-if="caseVO.dpmas.length>1">
{{ caseVO.lastTime }}
{{ formateDate(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>
@ -237,13 +237,13 @@
<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
>{{ caseVO.headInr ? caseVO.headInr : '--' }}</a-descriptions-item
>
<a-descriptions-item label="首次治疗后国际标准化比值 " class="required"
>{{ caseVO.afterInr ? caseVO.afterInr : '--' }} INR</a-descriptions-item
>{{ caseVO.afterInr ? caseVO.afterInr : '--' }}</a-descriptions-item
>
<a-descriptions-item v-if="caseVO.dpmas.length>1" label="最后一次治疗后国际标准化比值 " class="required"
>{{ caseVO.lastInr ? caseVO.lastInr : '--' }} INR</a-descriptions-item
>{{ caseVO.lastInr ? caseVO.lastInr : '--' }} </a-descriptions-item
>
<a-descriptions-item label="首次治疗前C反应蛋白">{{ caseVO.headCrp ? caseVO.headCrp : '--' }} ng/L</a-descriptions-item>
@ -273,7 +273,7 @@
<a-tab-pane key="5" tab="疾病转归">
<a-descriptions title="" bordered :column="4">
<a-descriptions-item label="出院时间 " :span="3" class="required">
{{ caseVO.dischargeTime }}
{{ formateDate(caseVO.dischargeTime) }}
</a-descriptions-item>
<a-descriptions-item label="出院天数 " :span="3" class="required">
{{ caseVO.day }}
@ -328,6 +328,7 @@ 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 dayjs from 'dayjs';
import {il6Unit, caseTypeOption, diagnoseOption, patientSickOption, ganneiOption, ganwaiOption, moshiOption, kangningOption, hospitalOption } from './data';
// ---------------- -------- ------------------------
const imgEditorRef = ref(null);
@ -571,7 +572,7 @@ const formatIl6Unit = (val) => {
let arr=il6Unit.filter(item=>{
return item.value==val;
})
return arr[0].name
return arr[0].name
}
}
//
@ -630,6 +631,9 @@ const saveEditor = () => {
const handleOk = () => {
showEdit.value = false;
};
const formateDate=(val)=>{
return dayjs(val).format('YYYY-MM-DD')
};
defineExpose({
show,
});
@ -684,7 +688,7 @@ defineExpose({
margin: 0;
}
:deep(.ant-descriptions-item-label){
max-width: 140px;
max-width: 160px;
}
:deep(.ant-checkbox-checked .ant-checkbox-inner),:deep(.ant-radio-checked .ant-radio-inner){
background-color: #1890ff;

View File

@ -1,46 +1,46 @@
<template>
<div id="tui-image-editor" ></div>
<div id="tui-image-editor"></div>
</template>
<script setup>
import { message, Modal } from 'ant-design-vue';
import { ref,onBeforeUnmount} from 'vue';
import { ref, onBeforeUnmount, nextTick } from 'vue';
import 'tui-image-editor/dist/tui-image-editor.css';
import 'tui-color-picker/dist/tui-color-picker.css';
import ImageEditor from 'tui-image-editor';
import { caseplatformCaseApi } from '/@/api/business/case/caseplatform-case-api';
import { FileUtil } from '/@/utils/fileutil'
import { FileUtil } from '/@/utils/fileutil';
import dayjs from 'dayjs';
import { SmartLoading } from '/@/components/framework/smart-loading';
const props=defineProps({
imgsrc:{
type:String,
default:''
const props = defineProps({
imgsrc: {
type: String,
default: '',
},
imgIndex:{
type:Number,
default:0
imgIndex: {
type: Number,
default: 0,
},
imgType:{
type:String,
default:''
imgType: {
type: String,
default: '',
},
dpmasId:{
type:Number,
default:0,
dpmasId: {
type: Number,
default: 0,
},
caseId:{
type:Number,
default:0,
caseId: {
type: Number,
default: 0,
},
caseObj:{
type:Object,
default:()=>{},
}
})
const uploadImgSrc=ref('');
caseObj: {
type: Object,
default: () => {},
},
});
const uploadImgSrc = ref('');
const emit=defineEmits(['freshDetail'])
const emit = defineEmits(['freshDetail']);
// tui-image-editor
const locale_zh = {
ZoomIn: '放大',
@ -196,117 +196,125 @@ const customTheme = {
'colorpicker.title.color': '#fff',
};
const instance = ref(null);
const HandleMainDiagnoseImg=()=>{
let obj=props.caseObj.mainDiagnose;
obj.mainDiagnoseImg=uploadImgSrc.value;
const HandleMainDiagnoseImg = () => {
let obj = props.caseObj.mainDiagnose;
obj.mainDiagnoseImg = uploadImgSrc.value;
caseplatformCaseApi.updateMainDiagnose({
caseId:props.caseId,
mainDiagnose:JSON.stringify(obj)
}).then(res=>{
emit('freshDetail')
SmartLoading.hide();
message.success('保存成功');
}).catch(err=>{
SmartLoading.hide();
message.error('保存失败');
})
caseplatformCaseApi
.updateMainDiagnose({
caseId: props.caseId,
mainDiagnose: JSON.stringify(obj),
})
.then((res) => {
emit('freshDetail');
SmartLoading.hide();
message.success('保存成功');
})
.catch((err) => {
SmartLoading.hide();
message.error('保存失败');
});
};
const HandleDpmasImg=()=>{
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;
}
}
console.log(dpmasList[dpmasIndex].dpmasImg)
let newImgList = dpmasList[dpmasIndex].dpmasImg.split(',');
newImgList[props.imgIndex]=uploadImgSrc.value;
let dpmasImg='';
newImgList.forEach(item=>{
if(dpmasImg){
dpmasImg+=','+item;
}else{
dpmasImg=item
}
})
const HandleDpmasImg = () => {
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;
}
}
console.log(dpmasList[dpmasIndex].dpmasImg);
let newImgList = dpmasList[dpmasIndex].dpmasImg.split(',');
newImgList[props.imgIndex] = uploadImgSrc.value;
let dpmasImg = '';
newImgList.forEach((item) => {
if (dpmasImg) {
dpmasImg += ',' + item;
} else {
dpmasImg = item;
}
});
caseplatformCaseApi.updateDpmas({
caseId:props.caseId,
dmpsId:props.dpmasId,
dpmasImg:dpmasImg
}).then(res=>{
emit('freshDetail')
SmartLoading.hide();
message.success('保存成功');
}).catch(err=>{
SmartLoading.hide();
message.error('保存失败');
})
caseplatformCaseApi
.updateDpmas({
caseId: props.caseId,
dmpsId: props.dpmasId,
dpmasImg: dpmasImg,
})
.then((res) => {
emit('freshDetail');
SmartLoading.hide();
message.success('保存成功');
})
.catch((err) => {
SmartLoading.hide();
message.error('保存失败');
});
};
const HandleCheckImg=()=>{
let newImgList=props.caseObj.checkImg.split(',');
console.log(newImgList)
newImgList[props.imgIndex]=uploadImgSrc.value;
let checkImg='';
newImgList.forEach(item=>{
if(checkImg){
checkImg+=','+item;
}else{
checkImg=item
}
})
const HandleCheckImg = () => {
let newImgList = props.caseObj.checkImg.split(',');
console.log(newImgList);
newImgList[props.imgIndex] = uploadImgSrc.value;
let checkImg = '';
newImgList.forEach((item) => {
if (checkImg) {
checkImg += ',' + item;
} else {
checkImg = item;
}
});
caseplatformCaseApi.updateCheck({
caseId:props.caseId,
checkImg:checkImg
}).then(res=>{
emit('freshDetail')
SmartLoading.hide();
message.success('保存成功');
}).catch(err=>{
SmartLoading.hide();
message.error('保存失败');
})
caseplatformCaseApi
.updateCheck({
caseId: props.caseId,
checkImg: checkImg,
})
.then((res) => {
emit('freshDetail');
SmartLoading.hide();
message.success('保存成功');
})
.catch((err) => {
SmartLoading.hide();
message.error('保存失败');
});
};
const getImageFormat=(imageUrl)=>{
console.log(imageUrl)
var parts = imageUrl.split('.');
return parts[parts.length - 1];
};
const getImg=(file)=>{
const getImageFormat = (imageUrl) => {
console.log(imageUrl);
var parts = imageUrl.split('.');
return parts[parts.length - 1];
};
const getImg = (file) => {
return new Promise((resolve, reject) => {
caseplatformCaseApi.getOssSign(1).then(res=>{
console.log(res.data)
let { accessid, dir,policy,signature,host} = res.data;
let filename = dayjs().format('YYYYMMDDHHmmss')+FileUtil.UUID()+'.'+'png';
let formData = new FormData();
formData.append('OSSAccessKeyId',accessid);
formData.append('policy', policy);
formData.append('signature', signature);
formData.append('key', dir + filename);
formData.append('file', file, filename);
formData.append('success_action_status',200);
caseplatformCaseApi.ossUpload(host,formData).then(res => {
console.log(host + dir + filename);
resolve(host + dir + filename);
}).catch((err) => {
message.error('上传失败')
SmartLoading.hide();
})
})
})
SmartLoading.hide();
}
const blobToFile = (blob,name)=>{
return new File([blob],name,{type:blob.type});
}
caseplatformCaseApi.getOssSign(1).then((res) => {
console.log(res.data);
let { accessid, dir, policy, signature, host } = res.data;
let filename = dayjs().format('YYYYMMDDHHmmss') + FileUtil.UUID() + '.' + 'png';
let formData = new FormData();
formData.append('OSSAccessKeyId', accessid);
formData.append('policy', policy);
formData.append('signature', signature);
formData.append('key', dir + filename);
formData.append('file', file, filename);
formData.append('success_action_status', 200);
caseplatformCaseApi
.ossUpload(host, formData)
.then((res) => {
console.log(host + dir + filename);
resolve(host + dir + filename);
})
.catch((err) => {
message.error('上传失败');
SmartLoading.hide();
});
});
});
SmartLoading.hide();
};
const blobToFile = (blob, name) => {
return new File([blob], name, { type: blob.type });
};
const save = () => {
SmartLoading.show();
@ -323,21 +331,22 @@ const save = () => {
// fileToBase64(file).then((res) => {
// newSrc.value = res;
// });
let file= blobToFile(blob,new Date().getTime() + '.png');
console.log(file)
getImg(file).then(res=>{
uploadImgSrc.value=res;
if(props.imgType==='mainDiagnose'){
let file = blobToFile(blob, new Date().getTime() + '.png');
console.log(file);
getImg(file)
.then((res) => {
uploadImgSrc.value = res;
if (props.imgType === 'mainDiagnose') {
HandleMainDiagnoseImg();
}else if(props.imgType==='dpmas'){
} else if (props.imgType === 'dpmas') {
HandleDpmasImg();
}else if(props.imgType==='check'){
} else if (props.imgType === 'check') {
HandleCheckImg();
}
}).catch(err=>{
SmartLoading.hide();
})
}
})
.catch((err) => {
SmartLoading.hide();
});
};
const fileToBase64 = (file) => {
@ -355,6 +364,7 @@ const init = (src) => {
path: src,
name: '编辑图片',
},
menu: ['draw', 'text'], // flipmask
initMenu: 'draw', //
menuBarPosition: 'bottom', //
@ -362,10 +372,14 @@ const init = (src) => {
theme: customTheme, //
},
cssMaxWidth: 1000, // canvas
cssMaxHeight: 600, //
usageStatistics: false,
});
cssMaxHeight: 600
})
setTimeout(() => {
instance.value.setBrush({
color: '#000000',
width: 12,
});
},1000);
document.getElementsByClassName('tui-image-editor-main')[0].style.top = '45px'; //
//document.getElementsByClassName('tie-btn-reset tui-image-editor-item help')[0].style.display = 'none'; //
document.getElementsByClassName('tie-text-align-button')[0].style.display = 'none'; //
@ -388,8 +402,7 @@ onBeforeUnmount(() => {
instance.value = null;
}
});
defineExpose({init,save})
defineExpose({ init, save });
</script>
<style>
@ -462,7 +475,7 @@ defineExpose({init,save})
top: 14px;
z-index: 999;
cursor: pointer;
color:#fff;
color: #fff;
font-size: 17px;
opacity: 0.8;
}

View File

@ -161,7 +161,7 @@ const columns = ref([
ellipsis: true,
},
{
title: '审核状态',
title: '申请状态',
dataIndex: 'status',
ellipsis: true,
},

View File

@ -31,7 +31,11 @@
<p class="hint">初始密码默认为随机</p>
</a-form-item>
<a-form-item label="性别" name="gender">
<smart-enum-select style="width: 100%" v-model:value="form.gender" placeholder="请选择性别" enum-name="GENDER_ENUM" />
<a-select v-model:value="form.gender" placeholder="请选择性别">
<a-select-option value="1"></a-select-option>
<a-select-option value="2"></a-select-option>
</a-select>
<!-- <smart-enum-select style="width: 100%" v-model:value="form.gender" placeholder="请选择性别" enum-name="GENDER_ENUM" /> -->
</a-form-item>
<a-form-item label="状态" name="disabledFlag">
<a-select v-model:value="form.disabledFlag" placeholder="请选择状态">
@ -79,6 +83,10 @@ import { smartSentry } from '/@/lib/smart-sentry';
}
//
async function showDrawer(rowData) {
if(rowData.gender){
rowData.gender=rowData.gender.toString();
}
Object.assign(form, formDefault);
if (rowData && !_.isEmpty(rowData)) {
Object.assign(form, rowData);
@ -153,6 +161,7 @@ import { smartSentry } from '/@/lib/smart-sentry';
//
async function onSubmit(keepAdding) {
let validateFormRes = await validateForm(formRef.value);
if (!validateFormRes) {
message.error('参数验证错误,请仔细填写表单数据!');
@ -168,6 +177,7 @@ import { smartSentry } from '/@/lib/smart-sentry';
async function addEmployee(keepAdding) {
try {
console.log(form);
let { data } = await employeeApi.addEmployee(form);
message.success('添加成功');
emit('show-account', form.loginName, data);