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">{{ $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="年龄 " class="required">{{ caseVO.age ? caseVO.age : '--' }}</a-descriptions-item>
<a-descriptions-item label="入院时间 " :span="2" class="required">{{ <a-descriptions-item label="入院时间 " :span="2" class="required">{{
caseVO.admissionTime ? caseVO.admissionTime : '--' caseVO.admissionTime ? formateDate(caseVO.admissionTime) : '--'
}}</a-descriptions-item> }}</a-descriptions-item>
<a-descriptions-item label="治疗类型(多选) " :span="3" class="required"> <a-descriptions-item label="治疗类型(多选) " :span="3" class="required">
@ -99,7 +99,7 @@
> >
<a-descriptions-item label="治疗时间 " :span="2" class="required"> <a-descriptions-item label="治疗时间 " :span="2" class="required">
{{ dpm.treatTime }} {{ formateDate(dpm.treatTime) }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="治疗内容 " :span="2" class="required" v-if="dpm"> <a-descriptions-item label="治疗内容 " :span="2" class="required" v-if="dpm">
<div class="row">1模式单选</div> <div class="row">1模式单选</div>
@ -186,13 +186,13 @@
<a-tab-pane key="4" tab="实验室检测"> <a-tab-pane key="4" tab="实验室检测">
<a-descriptions title="" bordered :column="caseVO.dpmas.length>1?3:2"> <a-descriptions title="" bordered :column="caseVO.dpmas.length>1?3:2">
<a-descriptions-item label="首次治疗前检测时间 " :span="3" class="required"> <a-descriptions-item label="首次治疗前检测时间 " :span="3" class="required">
{{ caseVO.headTime }} {{ formateDate(caseVO.headTime) }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="首次治疗后检测时间 " :span="3" class="required"> <a-descriptions-item label="首次治疗后检测时间 " :span="3" class="required">
{{ caseVO.afterTime }} {{ formateDate(caseVO.afterTime) }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="最后一次治疗后检测时间 " :span="3" class="required" v-if="caseVO.dpmas.length>1"> <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>
<a-descriptions-item label="首次治疗前总胆红素" class="required">{{ caseVO.headTb ? caseVO.headTb : '--' }} umol/L</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 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 v-if="caseVO.dpmas.length>1" label="最后一次治疗后凝血酶原活动度">{{ caseVO.lastPta ? caseVO.lastPta : '--' }} %</a-descriptions-item>
<a-descriptions-item label="首次治疗前国际标准化比值 " class="required" <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" <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" <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> <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-tab-pane key="5" tab="疾病转归">
<a-descriptions title="" bordered :column="4"> <a-descriptions title="" bordered :column="4">
<a-descriptions-item label="出院时间 " :span="3" class="required"> <a-descriptions-item label="出院时间 " :span="3" class="required">
{{ caseVO.dischargeTime }} {{ formateDate(caseVO.dischargeTime) }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="出院天数 " :span="3" class="required"> <a-descriptions-item label="出院天数 " :span="3" class="required">
{{ caseVO.day }} {{ caseVO.day }}
@ -328,6 +328,7 @@ import { caseplatformCaseApi } from '/@/api/business/case/caseplatform-case-api'
import { smartSentry } from '/@/lib/smart-sentry'; import { smartSentry } from '/@/lib/smart-sentry';
import imgCell from './imgCell.vue'; import imgCell from './imgCell.vue';
import imgEditor from './imgEditor.vue'; import imgEditor from './imgEditor.vue';
import dayjs from 'dayjs';
import {il6Unit, caseTypeOption, diagnoseOption, patientSickOption, ganneiOption, ganwaiOption, moshiOption, kangningOption, hospitalOption } from './data'; import {il6Unit, caseTypeOption, diagnoseOption, patientSickOption, ganneiOption, ganwaiOption, moshiOption, kangningOption, hospitalOption } from './data';
// ---------------- -------- ------------------------ // ---------------- -------- ------------------------
const imgEditorRef = ref(null); const imgEditorRef = ref(null);
@ -571,7 +572,7 @@ const formatIl6Unit = (val) => {
let arr=il6Unit.filter(item=>{ let arr=il6Unit.filter(item=>{
return item.value==val; return item.value==val;
}) })
return arr[0].name return arr[0].name
} }
} }
// //
@ -630,6 +631,9 @@ const saveEditor = () => {
const handleOk = () => { const handleOk = () => {
showEdit.value = false; showEdit.value = false;
}; };
const formateDate=(val)=>{
return dayjs(val).format('YYYY-MM-DD')
};
defineExpose({ defineExpose({
show, show,
}); });
@ -684,7 +688,7 @@ defineExpose({
margin: 0; margin: 0;
} }
:deep(.ant-descriptions-item-label){ :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){ :deep(.ant-checkbox-checked .ant-checkbox-inner),:deep(.ant-radio-checked .ant-radio-inner){
background-color: #1890ff; background-color: #1890ff;

View File

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

View File

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

View File

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