2025-12-06 发版,具体发版内容见发版记录
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { bodyTemperature, TOP_KEYS, HEAD_HEIGHT, LINE_HEIGHT } from './config'
|
||||
import { bodyTemperature, TOP_KEYS, HEAD_HEIGHT, LINE_HEIGHT } from './config';
|
||||
|
||||
export default class viewConfig {
|
||||
constructor({
|
||||
@@ -12,47 +12,44 @@ export default class viewConfig {
|
||||
strokeWidth = 2, // stroke width of line and dots
|
||||
strokeLinecap = 'round', // stroke line cap of line
|
||||
strokeLinejoin = 'round', // stroke line join of line
|
||||
renderData
|
||||
renderData,
|
||||
} = {}) {
|
||||
// 基础配置赋值
|
||||
this.width = width
|
||||
this.height = height
|
||||
this.stroke = stroke
|
||||
this.strokeWidth = strokeWidth
|
||||
this.strokeLinecap = strokeLinecap
|
||||
this.renderData = renderData
|
||||
this.strokeLinejoin = strokeLinejoin
|
||||
this.marginRight = marginRight
|
||||
this.marginLeft = marginLeft
|
||||
this.marginBottom = marginBottom
|
||||
this.marginTop = marginTop
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.stroke = stroke;
|
||||
this.strokeWidth = strokeWidth;
|
||||
this.strokeLinecap = strokeLinecap;
|
||||
this.renderData = renderData;
|
||||
this.strokeLinejoin = strokeLinejoin;
|
||||
this.marginRight = marginRight;
|
||||
this.marginLeft = marginLeft;
|
||||
this.marginBottom = marginBottom;
|
||||
this.marginTop = marginTop;
|
||||
// 计算属性赋值
|
||||
this.contentWidth = width - marginLeft - marginRight
|
||||
this.step = this.contentWidth / 8
|
||||
this.bottomPos = height - HEAD_HEIGHT - marginTop - (marginBottom - 30) // 底部坐标,30是因为默认的30,忘记计算了,后续的按照30的偏移量计算
|
||||
this.tableHeight = height - marginBottom - HEAD_HEIGHT
|
||||
const { micoStep, verticalHeight } = this.utilsGetMicoPos(
|
||||
this.step,
|
||||
this.bottomPos
|
||||
)
|
||||
this.micoStep = micoStep
|
||||
this.verticalHeight = verticalHeight
|
||||
this.X_OFFSET = micoStep / 2 // 为了让图标在小格子居中展示,需要进行一个偏移
|
||||
this.xRange = [this.step, width - marginLeft - marginRight] // [60, 860]
|
||||
this.topPos = marginTop + HEAD_HEIGHT
|
||||
this.topKeysPos = LINE_HEIGHT * (TOP_KEYS.length + 1) // 1 是时间那一行
|
||||
this.bottomKeysPosStart = this.topKeysPos + verticalHeight + 20
|
||||
this.yRange = [this.bottomKeysPosStart - 20, this.topKeysPos]
|
||||
this.contentWidth = width - marginLeft - marginRight;
|
||||
this.step = this.contentWidth / 8;
|
||||
this.bottomPos = height - HEAD_HEIGHT - marginTop - (marginBottom - 30); // 底部坐标,30是因为默认的30,忘记计算了,后续的按照30的偏移量计算
|
||||
this.tableHeight = height - marginBottom - HEAD_HEIGHT;
|
||||
const { micoStep, verticalHeight } = this.utilsGetMicoPos(this.step, this.bottomPos);
|
||||
this.micoStep = micoStep;
|
||||
this.verticalHeight = verticalHeight;
|
||||
this.X_OFFSET = micoStep / 2; // 为了让图标在小格子居中展示,需要进行一个偏移
|
||||
this.xRange = [this.step, width - marginLeft - marginRight]; // [60, 860]
|
||||
this.topPos = marginTop + HEAD_HEIGHT;
|
||||
this.topKeysPos = LINE_HEIGHT * (TOP_KEYS.length + 1); // 1 是时间那一行
|
||||
this.bottomKeysPosStart = this.topKeysPos + verticalHeight + 20;
|
||||
this.yRange = [this.bottomKeysPosStart - 20, this.topKeysPos];
|
||||
}
|
||||
|
||||
// 获取折线区域的高度
|
||||
utilsGetMicoPos(step, botpos) {
|
||||
const micoStep = (step * 7) / 42 // 折线小格子的宽度
|
||||
const verticalLength = bodyTemperature[1] - bodyTemperature[0] // 根据体温来计算格子
|
||||
const verticalHeight = micoStep * 5 * verticalLength
|
||||
const micoStep = (step * 7) / 42; // 折线小格子的宽度
|
||||
const verticalLength = bodyTemperature[1] - bodyTemperature[0]; // 根据体温来计算格子
|
||||
const verticalHeight = micoStep * 5 * verticalLength;
|
||||
return {
|
||||
micoStep,
|
||||
verticalHeight
|
||||
}
|
||||
verticalHeight,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,271 +1,215 @@
|
||||
import dayjs from 'dayjs'
|
||||
import dayjs from 'dayjs';
|
||||
import {
|
||||
HospitalName,
|
||||
temperatureName,
|
||||
showPainFlag,
|
||||
getInfoKeys,
|
||||
getBottomKeys
|
||||
} from './template'
|
||||
getBottomKeys,
|
||||
} from './template';
|
||||
|
||||
// 存放体温单的配置信息
|
||||
export const Header = {
|
||||
HospitalName,
|
||||
temperatureName
|
||||
}
|
||||
temperatureName,
|
||||
};
|
||||
// 患者信息
|
||||
export const INFO_KEYS = getInfoKeys()
|
||||
export const INFO_KEYS = getInfoKeys();
|
||||
// 头部信息标签
|
||||
export const TOP_KEYS = [
|
||||
//{
|
||||
// name: '患病日数',
|
||||
// getValue: (i, renderData) => {
|
||||
// const { beginDate, hospDays, outdate = '', dateClosed } = renderData.infoData
|
||||
// const tieml = new Date()
|
||||
// const timeNew = new Date((tieml / 1000 + 86400) * 1000)
|
||||
// const todayDate = dayjs(timeNew).format('YYYY-MM-DD')
|
||||
// const endDate = dayjs(outdate).add(1, 'day').format('YYYY-MM-DD')
|
||||
// const eachTime = dayjs(beginDate)
|
||||
// .add(i, 'day')
|
||||
// .format('YYYY-MM-DD')
|
||||
// if (eachTime === endDate || todayDate === eachTime) {
|
||||
// dateClosed.stopNumber = true
|
||||
// }
|
||||
// return dateClosed.stopNumber ? hospDays + i + 1 : ''
|
||||
// }
|
||||
//},
|
||||
{
|
||||
name: '日 期',
|
||||
getValue: (i, renderData) => {
|
||||
const { beginDate, outdate = '', hospDate = '', dateClosed } = renderData.infoData
|
||||
const tieml = new Date()
|
||||
const timeNew = new Date((tieml / 1000 + 86400) * 1000)
|
||||
const todayDate = dayjs(timeNew).format('YYYY-MM-DD')
|
||||
const endDate = dayjs(outdate).format('YYYY-MM-DD')
|
||||
const startDate = dayjs(hospDate).format('YYYY-MM-DD')
|
||||
let eachTime = dayjs(beginDate).add(i, 'day').format('YYYY-MM-DD')
|
||||
const { beginDate, outdate = '', hospDate = '', dateClosed } = renderData.infoData;
|
||||
const tieml = new Date();
|
||||
const timeNew = new Date((tieml / 1000 + 86400) * 1000);
|
||||
const todayDate = dayjs(timeNew).format('YYYY-MM-DD');
|
||||
const endDate = dayjs(outdate).format('YYYY-MM-DD');
|
||||
const startDate = dayjs(hospDate).format('YYYY-MM-DD');
|
||||
let eachTime = dayjs(beginDate).add(i, 'day').format('YYYY-MM-DD');
|
||||
if (eachTime === endDate || eachTime === todayDate) {
|
||||
dateClosed.stopTime = true
|
||||
dateClosed.stopTime = true;
|
||||
}
|
||||
if ((startDate === eachTime && i === 0) || dayjs(eachTime).format('MM-DD') === '01-01') {
|
||||
eachTime = dayjs(eachTime).format('YYYY年MM月DD日')
|
||||
eachTime = dayjs(eachTime).format('YYYY年MM月DD日');
|
||||
} else if (i === 0 || dayjs(eachTime).format('DD') === '01') {
|
||||
eachTime = dayjs(eachTime).format('MM月DD日')
|
||||
eachTime = dayjs(eachTime).format('MM月DD日');
|
||||
} else {
|
||||
eachTime = dayjs(eachTime).format('DD日')
|
||||
eachTime = dayjs(eachTime).format('DD日');
|
||||
}
|
||||
return dateClosed.stopTime ? eachTime : ''
|
||||
}
|
||||
return dateClosed.stopTime ? eachTime : '';
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '住院日数',
|
||||
getValue: (i, renderData) => {
|
||||
const { beginDate, hospDays, outdate = '', dateClosed } = renderData.infoData
|
||||
const tieml = new Date()
|
||||
const timeNew = new Date((tieml / 1000 + 86400) * 1000)
|
||||
const todayDate = dayjs(timeNew).format('YYYY-MM-DD')
|
||||
const endDate = dayjs(outdate).add(1, 'day').format('YYYY-MM-DD')
|
||||
const eachTime = dayjs(beginDate).add(i, 'day').format('YYYY-MM-DD')
|
||||
const { beginDate, hospDays, outdate = '', dateClosed } = renderData.infoData;
|
||||
const tieml = new Date();
|
||||
const timeNew = new Date((tieml / 1000 + 86400) * 1000);
|
||||
const todayDate = dayjs(timeNew).format('YYYY-MM-DD');
|
||||
const endDate = dayjs(outdate).add(1, 'day').format('YYYY-MM-DD');
|
||||
const eachTime = dayjs(beginDate).add(i, 'day').format('YYYY-MM-DD');
|
||||
if (eachTime === endDate || todayDate === eachTime) {
|
||||
dateClosed.stopNumber = false
|
||||
dateClosed.stopNumber = false;
|
||||
}
|
||||
const num = dateClosed.stopNumber ? hospDays + i + 1 : ''
|
||||
let hosNum = ''
|
||||
const num = dateClosed.stopNumber ? hospDays + i + 1 : '';
|
||||
let hosNum = '';
|
||||
if (num !== '') {
|
||||
hosNum = '第' + "\xa0\xa0\xa0" + num + "\xa0\xa0\xa0" + '日'
|
||||
hosNum = '第' + '\xa0\xa0\xa0' + num + '\xa0\xa0\xa0' + '日';
|
||||
} else {
|
||||
hosNum = '第' + "\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0" + '日'
|
||||
hosNum = '第' + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' + '日';
|
||||
}
|
||||
return hosNum
|
||||
}
|
||||
return hosNum;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: '术/娩后日数',
|
||||
getValue: (i, renderData) => {
|
||||
const { beginDate } = renderData.infoData
|
||||
const surgeryNumDays = renderData.surgeryNumDays
|
||||
const eachTime = dayjs(beginDate).add(i, 'day').format('YYYY-MM-DD')
|
||||
let num = surgeryNumDays.filter(item => item.date === eachTime)
|
||||
let hosNum = ''
|
||||
const { beginDate } = renderData.infoData;
|
||||
const surgeryNumDays = renderData.surgeryNumDays;
|
||||
const eachTime = dayjs(beginDate).add(i, 'day').format('YYYY-MM-DD');
|
||||
let num = surgeryNumDays.filter((item) => item.date === eachTime);
|
||||
let hosNum = '';
|
||||
if (num.length > 0) {
|
||||
hosNum = '第' + "\xa0\xa0\xa0" + num[0].typeValue + "\xa0\xa0\xa0" + '日'
|
||||
hosNum = '第' + '\xa0\xa0\xa0' + num[0].typeValue + '\xa0\xa0\xa0' + '日';
|
||||
} else {
|
||||
hosNum = '第' + "\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0" + '日'
|
||||
hosNum = '第' + '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0' + '日';
|
||||
}
|
||||
return hosNum
|
||||
}
|
||||
}
|
||||
]
|
||||
return hosNum;
|
||||
},
|
||||
},
|
||||
];
|
||||
// 最底部的字段绘制
|
||||
export const BOTTOM_KEYS = getBottomKeys()
|
||||
export const BOTTOM_KEYS = getBottomKeys();
|
||||
// 是否显示疼痛评分
|
||||
export const showPain = showPainFlag
|
||||
export const showPain = showPainFlag;
|
||||
|
||||
/** *********** 以下是固定选项 **************************/
|
||||
export const timeNumber = [2, 6, 10, 14, 18, 22] // 时间展示
|
||||
export const nightTime = [2, 18, 22] // 夜间红色高亮时间
|
||||
//export const leftTEXT1 = [
|
||||
// // ['脉3搏,(次/分), 180', '160', '140', '120', '100', '80', '60', '40'],
|
||||
// // ['体4温,(℃), 42', '41', '40', '39', '38', '37', '36', '35']
|
||||
// // ['华氏,( °F), 107.6', '105.8', '104', '102.2', '100.4', '98.6', '96.8', '95']
|
||||
// ['华氏,( °F), ', '', '107', '106', '105', '104', '103', '102', '101', '100', '99', '98', '97', '96', '95', '94']
|
||||
// // ['摄氏,(℃), 42', '41', '40', '39', '38', '37', '36', '35']
|
||||
//]
|
||||
//export const leftTEXT2 = [
|
||||
// ['摄氏,(℃), ', '42', '41', '40', '39', '38', '37', '36', '35']
|
||||
//]
|
||||
//export const rightTEXT = [
|
||||
// [',, ', '180', '160', '140', '120', '100', '80', '60', '40']
|
||||
//]
|
||||
//export const painTEXT = [
|
||||
// ['疼 痛'],
|
||||
// ['8', '6', '4', '2']
|
||||
//]
|
||||
export const timeNumber = [2, 6, 10, 14, 18, 22]; // 时间展示
|
||||
export const nightTime = [2, 18, 22]; // 夜间红色高亮时间
|
||||
export const leftTEXT = [
|
||||
['脉搏,(次/分),', '180', '160', '140', '120', '100', '80', '60', '40'],
|
||||
['体温,(℃), ', '42', '41', '40', '39', '38', '37', '36', '35']
|
||||
]
|
||||
export const painTEXT = [['疼 痛 强 度'], ['10', '8', '6', '4', '2', '0']]
|
||||
export const inOutItem = ['入观', '分娩', '手术', '转入', '出观', '死亡']
|
||||
export const otherItem = ['外出', '请假', '拒测', '离院', '其他']
|
||||
['体温,(℃), ', '42', '41', '40', '39', '38', '37', '36', '35'],
|
||||
];
|
||||
export const painTEXT = [['疼 痛 强 度'], ['10', '8', '6', '4', '2', '0']];
|
||||
export const inOutItem = ['入观', '分娩', '手术', '转入', '出观', '死亡'];
|
||||
export const otherItem = ['外出', '请假', '拒测', '离院', '其他'];
|
||||
export const sheetOptions = {
|
||||
locations: [{
|
||||
code: '1',
|
||||
display: '体温'
|
||||
}, {
|
||||
code: '2',
|
||||
display: '口温'
|
||||
}, {
|
||||
code: '3',
|
||||
display: '肛温'
|
||||
}, {
|
||||
code: '4',
|
||||
display: '耳温'
|
||||
}],
|
||||
breath: [{
|
||||
code: '',
|
||||
display: '自主呼吸'
|
||||
}, {
|
||||
code: '®',
|
||||
display: '机械通气'
|
||||
}],
|
||||
poop: [{
|
||||
code: '',
|
||||
display: '正常'
|
||||
}, {
|
||||
code: '※',
|
||||
display: '失禁'
|
||||
}, {
|
||||
code: '☆',
|
||||
display: '人工肛门'
|
||||
}, {
|
||||
code: '/E',
|
||||
display: '灌肠'
|
||||
}],
|
||||
pee: [{
|
||||
code: '',
|
||||
display: '正常'
|
||||
}, {
|
||||
code: '※',
|
||||
display: '失禁'
|
||||
}, {
|
||||
code: 'C+',
|
||||
display: '导尿'
|
||||
}],
|
||||
locations: [
|
||||
{
|
||||
code: '1',
|
||||
display: '体温',
|
||||
},
|
||||
{
|
||||
code: '2',
|
||||
display: '口温',
|
||||
},
|
||||
{
|
||||
code: '3',
|
||||
display: '肛温',
|
||||
},
|
||||
{
|
||||
code: '4',
|
||||
display: '耳温',
|
||||
},
|
||||
],
|
||||
breath: [
|
||||
{
|
||||
code: '',
|
||||
display: '自主呼吸',
|
||||
},
|
||||
{
|
||||
code: '®',
|
||||
display: '机械通气',
|
||||
},
|
||||
],
|
||||
poop: [
|
||||
{
|
||||
code: '',
|
||||
display: '正常',
|
||||
},
|
||||
{
|
||||
code: '※',
|
||||
display: '失禁',
|
||||
},
|
||||
{
|
||||
code: '☆',
|
||||
display: '人工肛门',
|
||||
},
|
||||
{
|
||||
code: '/E',
|
||||
display: '灌肠',
|
||||
},
|
||||
],
|
||||
pee: [
|
||||
{
|
||||
code: '',
|
||||
display: '正常',
|
||||
},
|
||||
{
|
||||
code: '※',
|
||||
display: '失禁',
|
||||
},
|
||||
{
|
||||
code: 'C+',
|
||||
display: '导尿',
|
||||
},
|
||||
],
|
||||
heart: ['窦性心律', '起搏心律', '房性心律', '异常心律'],
|
||||
weight: ['正常', '卧床', '轮椅', '平车']
|
||||
}
|
||||
weight: ['正常', '卧床', '轮椅', '平车'],
|
||||
};
|
||||
// 此处是显示数字的 要和leftTEXT保持一直
|
||||
// export const bodyTemperature1 = [94, 107]
|
||||
// export const starNumEnv1 = bodyTemperature1[0] // 开始体温
|
||||
// export const endNumEnv1 = bodyTemperature1[1] // 结束体温
|
||||
export const bodyTemperature = [33, 43]
|
||||
export const starNumEnv = bodyTemperature[0] // 开始体温
|
||||
export const endNumEnv = bodyTemperature[1] // 结束体温
|
||||
export const heartRange = [0, 200]
|
||||
export const painScore = [0, 10]
|
||||
export const bodyTemperature = [33, 43];
|
||||
export const starNumEnv = bodyTemperature[0]; // 开始体温
|
||||
export const endNumEnv = bodyTemperature[1]; // 结束体温
|
||||
export const heartRange = [0, 200];
|
||||
export const painScore = [0, 10];
|
||||
|
||||
// 中间图表字段对应
|
||||
export const CHART_KEYS = [
|
||||
{
|
||||
key: '001',
|
||||
code: 'breath',
|
||||
name: '呼吸'
|
||||
name: '呼吸',
|
||||
},
|
||||
{
|
||||
key: '002',
|
||||
code: 'sphygmus',
|
||||
name: '脉搏'
|
||||
name: '脉搏',
|
||||
},
|
||||
{
|
||||
key: '003',
|
||||
code: 'temperature',
|
||||
name: '体温'
|
||||
name: '体温',
|
||||
},
|
||||
{
|
||||
key: '012',
|
||||
code: 'inOut',
|
||||
name: '特殊标记'
|
||||
name: '特殊标记',
|
||||
},
|
||||
{
|
||||
key: '013',
|
||||
code: 'refuse',
|
||||
name: '标记内容'
|
||||
name: '标记内容',
|
||||
},
|
||||
{
|
||||
key: '014',
|
||||
code: 'heartRate',
|
||||
name: '心率'
|
||||
name: '心率',
|
||||
},
|
||||
{
|
||||
key: '015',
|
||||
code: 'lowerTemp',
|
||||
name: '物理降温'
|
||||
name: '物理降温',
|
||||
},
|
||||
{
|
||||
key: '016',
|
||||
code: 'painScore',
|
||||
name: '疼痛评分'
|
||||
}
|
||||
// {
|
||||
// key: '017',
|
||||
// code: 'admission',
|
||||
// name: '入院'
|
||||
// },
|
||||
// {
|
||||
// key: '018',
|
||||
// code: 'bigSurgery',
|
||||
// name: '大手术'
|
||||
// },
|
||||
// {
|
||||
// key: '019',
|
||||
// code: 'smallSurgery',
|
||||
// name: '小手术'
|
||||
// },
|
||||
// {
|
||||
// key: '020',
|
||||
// code: 'discharge',
|
||||
// name: '出院'
|
||||
// },
|
||||
// {
|
||||
// key: '021',
|
||||
// code: 'parturition',
|
||||
// name: '分娩'
|
||||
// },
|
||||
// {
|
||||
// key: '022',
|
||||
// code: 'transfer',
|
||||
// name: '转科'
|
||||
// },
|
||||
// {
|
||||
// key: '9507',
|
||||
// code: 'death',
|
||||
// name: '死亡'
|
||||
// }
|
||||
]
|
||||
|
||||
export const HEAD_HEIGHT = 80 // 头部文字预留位置
|
||||
export const LINE_HEIGHT = 20 // 一行的行高
|
||||
export const textLeftMargin = 4 // 文字左边边距
|
||||
export const TEXT_MARGIN_BOTTOM = 6 // 文字向上偏移量
|
||||
export const symbolArrowHeight = 20
|
||||
name: '疼痛评分',
|
||||
},
|
||||
];
|
||||
|
||||
export const HEAD_HEIGHT = 120; // 头部文字预留位置
|
||||
export const LINE_HEIGHT = 20; // 一行的行高
|
||||
export const textLeftMargin = 4; // 文字左边边距
|
||||
export const TEXT_MARGIN_BOTTOM = 6; // 文字向上偏移量
|
||||
export const symbolArrowHeight = 20;
|
||||
|
||||
@@ -4,42 +4,32 @@
|
||||
// index: 0
|
||||
// value: 36
|
||||
// }
|
||||
export function getMaxList({
|
||||
list = [],
|
||||
max = 0,
|
||||
min = 0,
|
||||
maxDefault = 0,
|
||||
minDefault = 0
|
||||
} = {}) {
|
||||
return list.map(item => {
|
||||
if (((item.value > max) || (item.value < min)) && item.value !== null) {
|
||||
const ismax = item.value > max
|
||||
export function getMaxList({ list = [], max = 0, min = 0, maxDefault = 0, minDefault = 0 } = {}) {
|
||||
return list.map((item) => {
|
||||
if ((item.value > max || item.value < min) && item.value !== null) {
|
||||
const ismax = item.value > max;
|
||||
return {
|
||||
...item,
|
||||
value: ismax ? maxDefault : minDefault,
|
||||
sourceValue: item.value,
|
||||
ismax: ismax,
|
||||
max,
|
||||
min
|
||||
}
|
||||
min,
|
||||
};
|
||||
} else {
|
||||
return null
|
||||
return null;
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function levelingData({
|
||||
list = [],
|
||||
maxDefault = 0,
|
||||
minDefault = 0
|
||||
}) {
|
||||
return list.map(item => {
|
||||
if (item.value === null) return item
|
||||
export function levelingData({ list = [], maxDefault = 0, minDefault = 0 }) {
|
||||
return list.map((item) => {
|
||||
if (item.value === null) return item;
|
||||
if (item.value > maxDefault) {
|
||||
item.value = maxDefault
|
||||
item.value = maxDefault;
|
||||
} else if (item.value < minDefault) {
|
||||
item.value = minDefault
|
||||
item.value = minDefault;
|
||||
}
|
||||
return item
|
||||
})
|
||||
return item;
|
||||
});
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
// 数据处理
|
||||
import * as d3 from 'd3'
|
||||
import { symbol } from 'd3-shape'
|
||||
import * as d3 from 'd3';
|
||||
import { symbol } from 'd3-shape';
|
||||
import {
|
||||
getTypeData,
|
||||
getTypeDatas,
|
||||
@@ -13,12 +13,19 @@ import {
|
||||
getType,
|
||||
getHeartRate,
|
||||
disconnectEvents,
|
||||
getBrokenLine
|
||||
} from './utils'
|
||||
import { HEAD_HEIGHT, LINE_HEIGHT, TOP_KEYS, BOTTOM_KEYS, symbolArrowHeight, textLeftMargin} from './config'
|
||||
getBrokenLine,
|
||||
} from './utils';
|
||||
import {
|
||||
HEAD_HEIGHT,
|
||||
LINE_HEIGHT,
|
||||
TOP_KEYS,
|
||||
BOTTOM_KEYS,
|
||||
symbolArrowHeight,
|
||||
textLeftMargin,
|
||||
} from './config';
|
||||
export const iconDrawObj = {
|
||||
// 绘制圆形图标
|
||||
getDrawRoundIcon: ({ content,data, x, y, fill = 'blue',stroke = 'blue', r = 5 }) => {
|
||||
getDrawRoundIcon: ({ content, data, x, y, fill = 'blue', stroke = 'blue', r = 5 }) => {
|
||||
// 增加icon 红色空心
|
||||
content
|
||||
.append('g')
|
||||
@@ -29,23 +36,32 @@ export const iconDrawObj = {
|
||||
.data(data)
|
||||
.join('circle')
|
||||
.attr('transform', (i) => {
|
||||
const yVal = y(i) || 0
|
||||
const yVal = y(i) || 0;
|
||||
if (!yVal) {
|
||||
return 'scale(0)'
|
||||
return 'scale(0)';
|
||||
}
|
||||
return ''
|
||||
return '';
|
||||
})
|
||||
.attr('cx', x)
|
||||
.attr('cy', y)
|
||||
.attr('r', (i) => {
|
||||
if (y(i)) {
|
||||
return r
|
||||
return r;
|
||||
}
|
||||
return 0
|
||||
})
|
||||
return 0;
|
||||
});
|
||||
},
|
||||
// 绘制圆形点图标
|
||||
getDrawRoundDotIcon: ({ content, data, x, y, fill = 'white', stroke = 'blue', deepFill = 'blue', r = 6 }) => {
|
||||
getDrawRoundDotIcon: ({
|
||||
content,
|
||||
data,
|
||||
x,
|
||||
y,
|
||||
fill = 'white',
|
||||
stroke = 'blue',
|
||||
deepFill = 'blue',
|
||||
r = 6,
|
||||
}) => {
|
||||
content
|
||||
.append('g')
|
||||
.attr('fill', fill)
|
||||
@@ -55,11 +71,11 @@ export const iconDrawObj = {
|
||||
.data(data)
|
||||
.join('circle')
|
||||
.attr('transform', (i) => {
|
||||
const yVal = y(i) || 0
|
||||
const yVal = y(i) || 0;
|
||||
if (!yVal) {
|
||||
return 'scale(0)'
|
||||
return 'scale(0)';
|
||||
}
|
||||
return ''
|
||||
return '';
|
||||
})
|
||||
.attr('cx', x)
|
||||
.attr('cy', y)
|
||||
@@ -68,7 +84,7 @@ export const iconDrawObj = {
|
||||
.attr('cx', x)
|
||||
.attr('cy', y)
|
||||
.attr('r', 1)
|
||||
.attr('fill', deepFill)
|
||||
.attr('fill', deepFill);
|
||||
},
|
||||
// 绘制x
|
||||
getDrawXIcon: ({ content, data, x, y, fill = 'blue', stroke = 'blue' }) => {
|
||||
@@ -81,43 +97,43 @@ export const iconDrawObj = {
|
||||
.data(data)
|
||||
.join('line')
|
||||
.attr('transform', (i) => {
|
||||
let yVal = y
|
||||
let yVal = y;
|
||||
if (typeof y === 'function') {
|
||||
yVal = y(i) || 0
|
||||
yVal = y(i) || 0;
|
||||
}
|
||||
if (!yVal) {
|
||||
return 'scale(0)'
|
||||
return 'scale(0)';
|
||||
}
|
||||
return ''
|
||||
return '';
|
||||
})
|
||||
.attr('x1', function(d) {
|
||||
return x(d) - 4
|
||||
.attr('x1', function (d) {
|
||||
return x(d) - 4;
|
||||
})
|
||||
.attr('y1', function(d) {
|
||||
return y(d) - 4
|
||||
.attr('y1', function (d) {
|
||||
return y(d) - 4;
|
||||
})
|
||||
.attr('x2', function(d) {
|
||||
return x(d) + 4
|
||||
.attr('x2', function (d) {
|
||||
return x(d) + 4;
|
||||
})
|
||||
.attr('y2', function(d) {
|
||||
return y(d) + 4
|
||||
.attr('y2', function (d) {
|
||||
return y(d) + 4;
|
||||
})
|
||||
.clone()
|
||||
.attr('x1', function(d) {
|
||||
return x(d) + 4
|
||||
.attr('x1', function (d) {
|
||||
return x(d) + 4;
|
||||
})
|
||||
.attr('y1', function(d) {
|
||||
return y(d) - 4
|
||||
.attr('y1', function (d) {
|
||||
return y(d) - 4;
|
||||
})
|
||||
.attr('x2', function(d) {
|
||||
return x(d) - 4
|
||||
})
|
||||
.attr('y2', function(d) {
|
||||
return y(d) + 4
|
||||
.attr('x2', function (d) {
|
||||
return x(d) - 4;
|
||||
})
|
||||
.attr('y2', function (d) {
|
||||
return y(d) + 4;
|
||||
});
|
||||
},
|
||||
// 绘制三角形
|
||||
drawThreeIcon: ({ content, data, x,y, fill = 'blue', stroke = 'blue', riangle = 48 }) => {
|
||||
drawThreeIcon: ({ content, data, x, y, fill = 'blue', stroke = 'blue', riangle = 48 }) => {
|
||||
// 蓝色三角形
|
||||
content
|
||||
.append('g')
|
||||
@@ -126,74 +142,82 @@ export const iconDrawObj = {
|
||||
.data(data)
|
||||
.join('g')
|
||||
.attr('transform', (i) => {
|
||||
const yVal = y(i) || 0
|
||||
const yVal = y(i) || 0;
|
||||
if (!yVal) {
|
||||
return 'scale(0)'
|
||||
return 'scale(0)';
|
||||
}
|
||||
return `translate(${x(i)},${yVal})`
|
||||
return `translate(${x(i)},${yVal})`;
|
||||
})
|
||||
.append('path')
|
||||
.call((path) => {
|
||||
const symbolThree = symbol()
|
||||
const symbolIndex = 5
|
||||
symbolThree.type(d3.symbols[symbolIndex])
|
||||
path.attr('d', symbolThree.size(riangle)).attr('fill', fill) .attr('stroke', stroke)
|
||||
const symbolThree = symbol();
|
||||
const symbolIndex = 5;
|
||||
symbolThree.type(d3.symbols[symbolIndex]);
|
||||
path.attr('d', symbolThree.size(riangle)).attr('fill', fill).attr('stroke', stroke);
|
||||
// .transition()
|
||||
// .duration(1500)
|
||||
// .attr('d', symbolThree.size(48))
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export function getG(svg, viewConfig) {
|
||||
return svg .append('g') .attr( 'transform', `translate(${viewConfig.marginLeft},${viewConfig.marginTop + HEAD_HEIGHT})` )
|
||||
return svg
|
||||
.append('g')
|
||||
.attr('transform', `translate(${viewConfig.marginLeft},${viewConfig.marginTop + HEAD_HEIGHT})`);
|
||||
}
|
||||
|
||||
// 设置数据
|
||||
export function getData(allData) {
|
||||
const rowsData = allData.rows // allData, '【全部数据】'
|
||||
const infoData = allData.grParamBOS
|
||||
const typesData = getTypeDatas(allData.types, allData.grParamBOS.beginDate)
|
||||
const selectOp = allData.selectOp
|
||||
const symbolTextArr = getTypeData('018', rowsData, false, allData.grParamBOS.beginDate) // 【特殊标记】
|
||||
const symbolGoUp = getType('003', rowsData, allData.grParamBOS.beginDate) // 不升
|
||||
const rowsData = allData.rows; // allData, '【全部数据】'
|
||||
const infoData = allData.grParamBOS;
|
||||
const typesData = getTypeDatas(allData.types, allData.grParamBOS.beginDate);
|
||||
const selectOp = allData.selectOp;
|
||||
const symbolTextArr = getTypeData('018', rowsData, false, allData.grParamBOS.beginDate); // 【特殊标记】
|
||||
const symbolGoUp = getType('003', rowsData, allData.grParamBOS.beginDate); // 不升
|
||||
// 体温单特殊数据
|
||||
const dicData = JSON.parse(window.localStorage.getItem('transDictCode'))
|
||||
const signsManagementList = dicData ? dicData.filter(item => item.name === '95')[0].concept.sort((a, b) => { return a.displayOrder - b.displayOrder }) :[]
|
||||
const otherArr = []
|
||||
const dicData = JSON.parse(window.localStorage.getItem('transDictCode'));
|
||||
const signsManagementList = dicData
|
||||
? dicData
|
||||
.filter((item) => item.name === '95')[0]
|
||||
.concept.sort((a, b) => {
|
||||
return a.displayOrder - b.displayOrder;
|
||||
})
|
||||
: [];
|
||||
const otherArr = [];
|
||||
if (signsManagementList.length > 0) {
|
||||
for (let j = 0; j < signsManagementList.length; j++) {
|
||||
if (signsManagementList[j].code !== '9502' & signsManagementList[j].code !== '9503') {
|
||||
const otherArrItem = getTypeData(signsManagementList[j].code, rowsData, false, allData.grParamBOS.beginDate)
|
||||
otherArr.push(otherArrItem)
|
||||
if ((signsManagementList[j].code !== '9502') & (signsManagementList[j].code !== '9503')) {
|
||||
const otherArrItem = getTypeData(
|
||||
signsManagementList[j].code,
|
||||
rowsData,
|
||||
false,
|
||||
allData.grParamBOS.beginDate
|
||||
);
|
||||
otherArr.push(otherArrItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
const surgeryNumDays = allData.types.filter(item => item.typeCode === '031')
|
||||
const surgeryArr = getTypeData('9502', rowsData, false, allData.grParamBOS.beginDate) // '【手术】'
|
||||
const minSurgeryArr = getTypeData('9503', rowsData, false, allData.grParamBOS.beginDate) // '【小手术】'
|
||||
const temArr = getTypeData('00301', rowsData, false, allData.grParamBOS.beginDate) // '【体温拒测等】'
|
||||
// const symbolGoUp = getType('003', rowsData, allData.grParamBOS.beginDate) // symbolGoUp, '不升'
|
||||
const surgeryNumDays = allData.types.filter((item) => item.typeCode === '031');
|
||||
const surgeryArr = getTypeData('9502', rowsData, false, allData.grParamBOS.beginDate); // '【手术】'
|
||||
const minSurgeryArr = getTypeData('9503', rowsData, false, allData.grParamBOS.beginDate); // '【小手术】'
|
||||
const temArr = getTypeData('00301', rowsData, false, allData.grParamBOS.beginDate); // '【体温拒测等】'
|
||||
// const symbolGoUp = getType('003', rowsData, allData.grParamBOS.beginDate) // symbolGoUp, '不升'
|
||||
// 35度线上的内容
|
||||
const symbolDegreesEvents = degreesOnline(symbolTextArr, selectOp, 0)
|
||||
const symbolDegreesOnline = disconnectEvents( symbolTextArr, selectOp, 'isBeforeAfter', 0 )
|
||||
const symbolDegreesEvents = degreesOnline(symbolTextArr, selectOp, 0);
|
||||
const symbolDegreesOnline = disconnectEvents(symbolTextArr, selectOp, 'isBeforeAfter', 0);
|
||||
// 40~42线上的内容
|
||||
const symbolTopOnline = degreesOnline(symbolTextArr, selectOp, 1)
|
||||
const symbolTopDegreesOnline = disconnectEvents(
|
||||
symbolTextArr,
|
||||
selectOp,
|
||||
'isBeforeAfter',
|
||||
1
|
||||
)
|
||||
const symbolContent = getTypeData('013', rowsData, false, allData.grParamBOS.beginDate) // symbolContent, '【标记内容】'
|
||||
const mergeTag = setMergeTag(symbolTopOnline, symbolContent) // mergeTag, '【合并标记,标记内容】'
|
||||
const symbolTopOnline = degreesOnline(symbolTextArr, selectOp, 1);
|
||||
const symbolTopDegreesOnline = disconnectEvents(symbolTextArr, selectOp, 'isBeforeAfter', 1);
|
||||
const symbolContent = getTypeData('013', rowsData, false, allData.grParamBOS.beginDate); // symbolContent, '【标记内容】'
|
||||
const mergeTag = setMergeTag(symbolTopOnline, symbolContent); // mergeTag, '【合并标记,标记内容】'
|
||||
// 产后日数
|
||||
infoData.postpartum = postpartumDays('031', typesData) // infoData, '产后日数'
|
||||
infoData.postpartum = postpartumDays('031', typesData); // infoData, '产后日数'
|
||||
// 写死的先
|
||||
infoData.dateClosed = {
|
||||
stopTime: true, // 控制结束日期
|
||||
stopNumber: true // 控制住院天数
|
||||
}
|
||||
stopNumber: true, // 控制住院天数
|
||||
};
|
||||
// 折线
|
||||
const brokenLineData = getBrokenLine(
|
||||
'003',
|
||||
@@ -202,22 +226,23 @@ export function getData(allData) {
|
||||
symbolGoUp,
|
||||
symbolTopDegreesOnline,
|
||||
allData.grParamBOS.beginDate
|
||||
)
|
||||
);
|
||||
// 模拟数据 体温
|
||||
const datasetAnus = getTypeAnimalHeat('003', rowsData, '1', allData.grParamBOS.beginDate) // datasetAnus, '腋温【x】'
|
||||
const bodyData = getTypeAnimalHeat('003', rowsData, '2', allData.grParamBOS.beginDate) // dbodyData, '口温'
|
||||
const datasetAnus = getTypeAnimalHeat('003', rowsData, '1', allData.grParamBOS.beginDate); // datasetAnus, '腋温【x】'
|
||||
const bodyData = getTypeAnimalHeat('003', rowsData, '2', allData.grParamBOS.beginDate); // dbodyData, '口温'
|
||||
// const datasetHeartrate = getTypeAnimalHeat('003', rowsData)
|
||||
const datasetHeartrate = getTypeAnimalHeat('003', rowsData, '3', allData.grParamBOS.beginDate) // datasetHeartrate, '肛温【红空圆】'
|
||||
const earCool = getTypeAnimalHeat('003', rowsData, '4', allData.grParamBOS.beginDate) // earCool, '耳朵温'
|
||||
const painScore = getHeartRate( // painScore, '疼痛'
|
||||
const datasetHeartrate = getTypeAnimalHeat('003', rowsData, '3', allData.grParamBOS.beginDate); // datasetHeartrate, '肛温【红空圆】'
|
||||
const earCool = getTypeAnimalHeat('003', rowsData, '4', allData.grParamBOS.beginDate); // earCool, '耳朵温'
|
||||
const painScore = getHeartRate(
|
||||
// painScore, '疼痛'
|
||||
'016',
|
||||
rowsData,
|
||||
symbolDegreesOnline,
|
||||
symbolTopDegreesOnline,
|
||||
true,
|
||||
allData.grParamBOS.beginDate
|
||||
)
|
||||
const allTemperatureData = [bodyData, datasetAnus, datasetHeartrate, earCool] // 所有的温度记录
|
||||
);
|
||||
const allTemperatureData = [bodyData, datasetAnus, datasetHeartrate, earCool]; // 所有的温度记录
|
||||
// '脉搏【红实圆】'
|
||||
const datasetPulse = getHeartRate(
|
||||
'002',
|
||||
@@ -226,7 +251,7 @@ export function getData(allData) {
|
||||
symbolTopDegreesOnline,
|
||||
true,
|
||||
allData.grParamBOS.beginDate
|
||||
)
|
||||
);
|
||||
// 心率【空心】
|
||||
const datasetHeartRate = getHeartRate(
|
||||
'014',
|
||||
@@ -235,14 +260,14 @@ export function getData(allData) {
|
||||
symbolTopDegreesOnline,
|
||||
true,
|
||||
allData.grParamBOS.beginDate
|
||||
)
|
||||
);
|
||||
// const allTemperatureData = getDrawData('003', rowsData, '1', allData.grParamBOS.beginDate) // datasetAnus, '腋温【x】'
|
||||
// const dataCool = getDrawCoolData('015', rowsData, true, allData.grParamBOS.beginDate) // dataCool, '【物理降温】'
|
||||
const dataCool = getTypeData('015', rowsData, true, allData.grParamBOS.beginDate) // 【物理降温】
|
||||
const dataCool = getTypeData('015', rowsData, true, allData.grParamBOS.beginDate); // 【物理降温】
|
||||
// 呼吸【黑实圆】
|
||||
const datasetPain = getTypeData('001', rowsData, false, allData.grParamBOS.beginDate)// 呼吸
|
||||
const datasetPain = getTypeData('001', rowsData, false, allData.grParamBOS.beginDate); // 呼吸
|
||||
|
||||
const title = infoData.title
|
||||
const title = infoData.title;
|
||||
return {
|
||||
title,
|
||||
datasetHeartRate,
|
||||
@@ -269,8 +294,8 @@ export function getData(allData) {
|
||||
temArr,
|
||||
surgeryArr,
|
||||
minSurgeryArr,
|
||||
surgeryNumDays
|
||||
}
|
||||
surgeryNumDays,
|
||||
};
|
||||
}
|
||||
|
||||
export function drawTopMask(svg, viewConfig) {
|
||||
@@ -289,19 +314,17 @@ export function drawTopMask(svg, viewConfig) {
|
||||
.attr('height', LINE_HEIGHT * (TOP_KEYS.length + 7.5) - 1)
|
||||
.attr('stroke', viewConfig.stroke)
|
||||
.attr('fill', '#fff')
|
||||
.attr('style', 'stroke-width: 0')
|
||||
.attr('style', 'stroke-width: 0');
|
||||
|
||||
drawTopVerticalLine(svg, viewConfig)
|
||||
drawTopVerticalLine(svg, viewConfig);
|
||||
}
|
||||
|
||||
export function drawTopVerticalLine(svg, viewConfig) {
|
||||
// 补上下竖线
|
||||
let start = viewConfig.step
|
||||
const lineG = getG(svg, viewConfig)
|
||||
.append('g')
|
||||
.attr('class', 'maskline-top')
|
||||
let start = viewConfig.step;
|
||||
const lineG = getG(svg, viewConfig).append('g').attr('class', 'maskline-top');
|
||||
while (start < viewConfig.contentWidth) {
|
||||
// const isLastLine = (start + viewConfig.step) >= viewConfig.contentWidth
|
||||
// const isLastLine = (start + viewConfig.step) >= viewConfig.contentWidth
|
||||
lineG
|
||||
.append('line')
|
||||
.attr('fill', 'stroke')
|
||||
@@ -311,13 +334,13 @@ export function drawTopVerticalLine(svg, viewConfig) {
|
||||
.attr('x2', start)
|
||||
.attr('stroke', start > viewConfig.step ? '#B22222' : viewConfig.stroke)
|
||||
// .attr('stroke', isLastLine ? 'black' : (start > viewConfig.step ? '#B22222' : viewConfig.stroke))
|
||||
.attr('stroke-width', 4) // 设置线条宽度为2
|
||||
start = start + viewConfig.step
|
||||
.attr('stroke-width', 4); // 设置线条宽度为2
|
||||
start = start + viewConfig.step;
|
||||
}
|
||||
}
|
||||
|
||||
export function drawBottomMask(svg, viewConfig) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const g = getG(svg, viewConfig);
|
||||
// 遮罩层挡住超出的折线
|
||||
g.append('rect')
|
||||
.attr('class', 'mask-rect')
|
||||
@@ -327,18 +350,16 @@ export function drawBottomMask(svg, viewConfig) {
|
||||
.attr('height', LINE_HEIGHT * (BOTTOM_KEYS.length + 5))
|
||||
.attr('stroke', viewConfig.stroke)
|
||||
.attr('fill', '#ffffff')
|
||||
.attr('style', 'stroke-width: 0')
|
||||
drawBottomMaskLine(svg, viewConfig)
|
||||
.attr('style', 'stroke-width: 0');
|
||||
drawBottomMaskLine(svg, viewConfig);
|
||||
}
|
||||
|
||||
function drawBottomMaskLine(svg, viewConfig) {
|
||||
// 补上下竖线
|
||||
let start = viewConfig.step
|
||||
const lineG = getG(svg, viewConfig)
|
||||
.append('g')
|
||||
.attr('class', 'maskline')
|
||||
let start = viewConfig.step;
|
||||
const lineG = getG(svg, viewConfig).append('g').attr('class', 'maskline');
|
||||
while (start < viewConfig.contentWidth) {
|
||||
// const isLastLine = (start + viewConfig.step) >= viewConfig.contentWidth;
|
||||
// const isLastLine = (start + viewConfig.step) >= viewConfig.contentWidth;
|
||||
lineG
|
||||
.append('line')
|
||||
.attr('fill', 'stroke')
|
||||
@@ -348,14 +369,14 @@ function drawBottomMaskLine(svg, viewConfig) {
|
||||
.attr('x2', start)
|
||||
.attr('stroke', start > viewConfig.step ? '#B22222' : viewConfig.stroke)
|
||||
//.attr('stroke', isLastLine ? 'black' : (start > viewConfig.step ? '#B22222' : viewConfig.stroke))
|
||||
.attr('stroke-width', 4) // 设置线条宽度为2
|
||||
start = start + viewConfig.step
|
||||
.attr('stroke-width', 4); // 设置线条宽度为2
|
||||
start = start + viewConfig.step;
|
||||
}
|
||||
}
|
||||
|
||||
// 绘制特殊事件文字 --- 有时间
|
||||
export function drawSpecialText(svg, viewConfig, textData) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const g = getG(svg, viewConfig);
|
||||
g.append('g')
|
||||
.selectAll('text')
|
||||
.data(textData)
|
||||
@@ -363,43 +384,46 @@ export function drawSpecialText(svg, viewConfig, textData) {
|
||||
.attr('style', 'font-size:14px; fill: red;')
|
||||
.attr('class', 'mytext')
|
||||
.html((d, i) => {
|
||||
const t = (d?.value || '').split(',')
|
||||
let time = ''
|
||||
const t = (d?.value || '').split(',');
|
||||
let time = '';
|
||||
if (t.length > 1) {
|
||||
time = t[0] + '于' + transNum(t[1].split(':')[0]) + '时' + transNum(t[1].split(':')[1]) + '分'
|
||||
time =
|
||||
t[0] + '于' + transNum(t[1].split(':')[0]) + '时' + transNum(t[1].split(':')[1]) + '分';
|
||||
// time = t[0] + '㇑' + transNum(t[1].split(':')[0]) + '时' + transNum(t[1].split(':')[1]) + '分'
|
||||
}
|
||||
const texts = time.split('')
|
||||
const texts = time.split('');
|
||||
return texts
|
||||
.map((text, i) => {
|
||||
return `<tspan dx="${i === 1 ? -14 : i === 0 ? 0 : Number(text) ? -8 : -14}" dy="${20}">${text}</tspan>`
|
||||
return `<tspan dx="${
|
||||
i === 1 ? -14 : i === 0 ? 0 : Number(text) ? -8 : -14
|
||||
}" dy="${20}">${text}</tspan>`;
|
||||
})
|
||||
.join('')
|
||||
.join('');
|
||||
})
|
||||
.attr('x', (d, i) => {
|
||||
return viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin
|
||||
return viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin;
|
||||
})
|
||||
.attr('y', () => {
|
||||
return viewConfig.topKeysPos - textLeftMargin
|
||||
})
|
||||
return viewConfig.topKeysPos - textLeftMargin;
|
||||
});
|
||||
}
|
||||
// 绘制特殊事件文字 --- 大手术小手术
|
||||
export function drawSurgery(svg, viewConfig, textData) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const textDatas = []
|
||||
const g = getG(svg, viewConfig);
|
||||
const textDatas = [];
|
||||
if (textData.length > 0) {
|
||||
for (let j = 0; j < textData.length; j++) {
|
||||
let item = {}
|
||||
let item = {};
|
||||
if (textData[j].value) {
|
||||
item = {
|
||||
index: textData[j].index,
|
||||
value: textData[j].value.split(',')[0],
|
||||
date: textData[j].date
|
||||
}
|
||||
date: textData[j].date,
|
||||
};
|
||||
} else {
|
||||
item = textData[j]
|
||||
item = textData[j];
|
||||
}
|
||||
textDatas.push(item)
|
||||
textDatas.push(item);
|
||||
}
|
||||
}
|
||||
g.append('g')
|
||||
@@ -409,40 +433,39 @@ export function drawSurgery(svg, viewConfig, textData) {
|
||||
.attr('style', 'font-size:15px; fill: red;')
|
||||
.attr('class', 'mytext')
|
||||
.html((d, i) => {
|
||||
const texts = (d?.value || '').split('')
|
||||
const texts = (d?.value || '').split('');
|
||||
return texts
|
||||
.map((text, i) => {
|
||||
return `<tspan dx="${
|
||||
i === 1 ? -15 : i === 0 ? 0 : Number(text) ? -8 : -15
|
||||
}" dy="${20}">${text}</tspan>`
|
||||
}" dy="${20}">${text}</tspan>`;
|
||||
})
|
||||
.join('')
|
||||
.join('');
|
||||
})
|
||||
.attr('x', (d, i) => {
|
||||
return viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin - 2;
|
||||
})
|
||||
.attr(
|
||||
'x',
|
||||
(d, i) => { return viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin - 2 }
|
||||
)
|
||||
.attr('y', () => {
|
||||
return viewConfig.topKeysPos - textLeftMargin
|
||||
})
|
||||
return viewConfig.topKeysPos - textLeftMargin;
|
||||
});
|
||||
}
|
||||
// 绘制特殊事件文字 --- 无时间
|
||||
export function drawSpecialNoTimeText(svg, viewConfig, textData) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const textDatas = []
|
||||
const g = getG(svg, viewConfig);
|
||||
const textDatas = [];
|
||||
if (textData.length > 0) {
|
||||
for (let j = 0; j < textData.length; j++) {
|
||||
let item = {}
|
||||
let item = {};
|
||||
if (textData[j].value) {
|
||||
item = {
|
||||
index: textData[j].index,
|
||||
value: textData[j].value.split(',')[0],
|
||||
date: textData[j].date
|
||||
}
|
||||
date: textData[j].date,
|
||||
};
|
||||
} else {
|
||||
item = textData[j]
|
||||
item = textData[j];
|
||||
}
|
||||
textDatas.push(item)
|
||||
textDatas.push(item);
|
||||
}
|
||||
}
|
||||
g.append('g')
|
||||
@@ -452,7 +475,7 @@ export function drawSpecialNoTimeText(svg, viewConfig, textData) {
|
||||
.attr('style', 'font-size:15px; fill: red;')
|
||||
.attr('class', 'mytext')
|
||||
.html((d, i) => {
|
||||
const texts = (d?.value || '').split('')
|
||||
const texts = (d?.value || '').split('');
|
||||
// let time = ''
|
||||
// if (t.length > 1) {
|
||||
// time = t[0] + '㇑' + transNum(t[1].split(':')[0]) + '时' + transNum(t[1].split(':')[1]) + '分'
|
||||
@@ -460,39 +483,38 @@ export function drawSpecialNoTimeText(svg, viewConfig, textData) {
|
||||
// const texts = time.split('')
|
||||
return texts
|
||||
.map((text, i) => {
|
||||
return `<tspan dx="${
|
||||
i === 1 ? -15 : i === 0 ? 0 : Number(text) ? -8 : -15
|
||||
}" dy="${ i === 0 ? 20 : 80}">${text}</tspan>`
|
||||
return `<tspan dx="${i === 1 ? -15 : i === 0 ? 0 : Number(text) ? -8 : -15}" dy="${
|
||||
i === 0 ? 20 : 80
|
||||
}">${text}</tspan>`;
|
||||
})
|
||||
.join('')
|
||||
.join('');
|
||||
})
|
||||
.attr('x', (d, i) => {
|
||||
return viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin - 2;
|
||||
})
|
||||
.attr(
|
||||
'x',
|
||||
(d, i) => { return viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin - 2 }
|
||||
)
|
||||
.attr('y', () => {
|
||||
return viewConfig.topKeysPos - textLeftMargin
|
||||
})
|
||||
return viewConfig.topKeysPos - textLeftMargin;
|
||||
});
|
||||
}
|
||||
|
||||
// 数字转换成文字
|
||||
function transNum(num) {
|
||||
const arr1 = ['', '十']
|
||||
const arr2 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
|
||||
const sw = num.split('')[0]
|
||||
const gw = num.split('')[1]
|
||||
const str1 = sw > 1 ? arr2[sw] + '十' : arr1[sw]
|
||||
let strNum = str1 + arr2[gw]
|
||||
const arr1 = ['', '十'];
|
||||
const arr2 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
|
||||
const sw = num.split('')[0];
|
||||
const gw = num.split('')[1];
|
||||
const str1 = sw > 1 ? arr2[sw] + '十' : arr1[sw];
|
||||
let strNum = str1 + arr2[gw];
|
||||
// 若H为十点整小时,则把零去掉,若m为十分,则去掉零
|
||||
if (strNum.indexOf('十') > 0 || strNum.indexOf('零') === 1) {
|
||||
strNum = strNum.replace('零', '')
|
||||
strNum = strNum.replace('零', '');
|
||||
}
|
||||
return strNum
|
||||
return strNum;
|
||||
}
|
||||
|
||||
// 绘制标签文字
|
||||
export function drawTagText(svg, viewConfig, textData) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const g = getG(svg, viewConfig);
|
||||
g.append('g')
|
||||
.selectAll('text')
|
||||
.data(textData)
|
||||
@@ -500,25 +522,24 @@ export function drawTagText(svg, viewConfig, textData) {
|
||||
.attr('style', 'font-size:14px; fill: black;')
|
||||
.attr('class', 'mytext')
|
||||
.html((d, i) => {
|
||||
const texts = (d?.value || '').split('')
|
||||
const texts = (d?.value || '').split('');
|
||||
return texts
|
||||
.map((text, i) => {
|
||||
return `<tspan dx="${i === 1 ? -14 : i === 0 ? 0 : Number(text) ? -8 : -14}" dy="${20}">${text}</tspan>`
|
||||
return `<tspan dx="${
|
||||
i === 1 ? -14 : i === 0 ? 0 : Number(text) ? -8 : -14
|
||||
}" dy="${20}">${text}</tspan>`;
|
||||
})
|
||||
.join('')
|
||||
.join('');
|
||||
})
|
||||
.attr(
|
||||
'x',
|
||||
(d, i) => viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin
|
||||
)
|
||||
.attr('x', (d, i) => viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin)
|
||||
.attr('y', () => {
|
||||
return viewConfig.topKeysPos - textLeftMargin + 198
|
||||
})
|
||||
return viewConfig.topKeysPos - textLeftMargin + 198;
|
||||
});
|
||||
}
|
||||
|
||||
// 绘制特殊事件文字底部
|
||||
export function drawBottomSpecialText(svg, viewConfig, textData) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const g = getG(svg, viewConfig);
|
||||
g.append('g')
|
||||
.selectAll('text')
|
||||
.data(textData)
|
||||
@@ -526,23 +547,20 @@ export function drawBottomSpecialText(svg, viewConfig, textData) {
|
||||
.attr('style', 'font-size:14px; fill: blue;')
|
||||
.attr('class', 'mytext')
|
||||
.html((d, i) => {
|
||||
const texts = (d?.value || '').split('')
|
||||
const texts = (d?.value || '').split('');
|
||||
return texts
|
||||
.map((text, i) => {
|
||||
return `<tspan dx="${
|
||||
i === 1 ? -14 : i === 0 ? 0 : Number(text) ? -8 : -14
|
||||
}" dy="${20}">${text}</tspan>`
|
||||
}" dy="${20}">${text}</tspan>`;
|
||||
})
|
||||
.join('')
|
||||
.join('');
|
||||
})
|
||||
.attr(
|
||||
'x',
|
||||
(d, i) => viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin
|
||||
)
|
||||
.attr('x', (d, i) => viewConfig.step + d.index * viewConfig.micoStep + textLeftMargin)
|
||||
.attr('y', (d) => {
|
||||
const texts = (d?.value || '').split('')
|
||||
return viewConfig.bottomKeysPosStart - texts.length * LINE_HEIGHT - 6 - 58
|
||||
})
|
||||
const texts = (d?.value || '').split('');
|
||||
return viewConfig.bottomKeysPosStart - texts.length * LINE_HEIGHT - 6 - 58;
|
||||
});
|
||||
}
|
||||
|
||||
export function initArrow(svg) {
|
||||
@@ -556,12 +574,9 @@ export function initArrow(svg) {
|
||||
.attr('viewBox', '0 0 12 12')
|
||||
.attr('refX', '6')
|
||||
.attr('refY', '6')
|
||||
.attr('orient', 'auto')
|
||||
const arrowPath = 'M2,2 L10,6 L2,10 L6,6 L2,2'
|
||||
arrowMarkerRed
|
||||
.append('path')
|
||||
.attr('d', arrowPath)
|
||||
.attr('fill', 'red')
|
||||
.attr('orient', 'auto');
|
||||
const arrowPath = 'M2,2 L10,6 L2,10 L6,6 L2,2';
|
||||
arrowMarkerRed.append('path').attr('d', arrowPath).attr('fill', 'red');
|
||||
const arrowMarkerBlue = svg
|
||||
.append('defs')
|
||||
.append('marker')
|
||||
@@ -572,16 +587,13 @@ export function initArrow(svg) {
|
||||
.attr('viewBox', '0 0 12 12')
|
||||
.attr('refX', '6')
|
||||
.attr('refY', '6')
|
||||
.attr('orient', 'auto')
|
||||
arrowMarkerBlue
|
||||
.append('path')
|
||||
.attr('d', arrowPath)
|
||||
.attr('fill', 'blue')
|
||||
.attr('orient', 'auto');
|
||||
arrowMarkerBlue.append('path').attr('d', arrowPath).attr('fill', 'blue');
|
||||
}
|
||||
|
||||
export function lineArrow({ svg, viewConfig, scale, data } = {}) {
|
||||
const g = getG(svg, viewConfig)
|
||||
const vaildData = data.filter((item) => item)
|
||||
const g = getG(svg, viewConfig);
|
||||
const vaildData = data.filter((item) => item);
|
||||
// {
|
||||
// ...item,
|
||||
// value: ismax ? maxDefault : minDefault,
|
||||
@@ -595,96 +607,85 @@ export function lineArrow({ svg, viewConfig, scale, data } = {}) {
|
||||
.data(vaildData)
|
||||
.join('line')
|
||||
.attr('x1', (d, i) => {
|
||||
return scale(d.index) + +viewConfig.X_OFFSET
|
||||
return scale(d.index) + +viewConfig.X_OFFSET;
|
||||
})
|
||||
.attr('y1', (d, i) => {
|
||||
if (d.ismax) {
|
||||
// 顶部箭头
|
||||
return viewConfig.topKeysPos + symbolArrowHeight * 1.5
|
||||
return viewConfig.topKeysPos + symbolArrowHeight * 1.5;
|
||||
} else {
|
||||
// 底部箭头
|
||||
return viewConfig.bottomKeysPosStart - symbolArrowHeight * 1.5
|
||||
return viewConfig.bottomKeysPosStart - symbolArrowHeight * 1.5;
|
||||
}
|
||||
})
|
||||
.attr('x2', (d, i) => {
|
||||
return scale(d.index) + +viewConfig.X_OFFSET
|
||||
return scale(d.index) + +viewConfig.X_OFFSET;
|
||||
})
|
||||
.attr('y2', (d, i) => {
|
||||
if (d.ismax) {
|
||||
// 顶部箭头
|
||||
return viewConfig.topKeysPos + symbolArrowHeight / 2
|
||||
return viewConfig.topKeysPos + symbolArrowHeight / 2;
|
||||
} else {
|
||||
// 底部箭头
|
||||
return viewConfig.bottomKeysPosStart - symbolArrowHeight / 2
|
||||
return viewConfig.bottomKeysPosStart - symbolArrowHeight / 2;
|
||||
}
|
||||
})
|
||||
.attr('stroke', (d) => {
|
||||
return d.ismax ? 'red' : 'blue'
|
||||
return d.ismax ? 'red' : 'blue';
|
||||
})
|
||||
.attr('stroke-width', 2)
|
||||
.attr('marker-end', (d, i) => {
|
||||
return d.ismax ? 'url(#redArrow)' : 'url(#blueArrow)'
|
||||
})
|
||||
return d.ismax ? 'url(#redArrow)' : 'url(#blueArrow)';
|
||||
});
|
||||
g.selectAll('text')
|
||||
.data(vaildData)
|
||||
.join('text')
|
||||
.attr('class', 'desctextname')
|
||||
.html((item, i) => {
|
||||
const value = `${item.sourceValue}`.split('')
|
||||
const dotIndex = value.indexOf('.')
|
||||
const value = `${item.sourceValue}`.split('');
|
||||
const dotIndex = value.indexOf('.');
|
||||
return value
|
||||
.map((d, index) => {
|
||||
let y
|
||||
let multiple = index
|
||||
let addition = 0 // dot height
|
||||
let y;
|
||||
let multiple = index;
|
||||
let addition = 0; // dot height
|
||||
if (item.ismax) {
|
||||
if (index >= dotIndex) {
|
||||
addition = 8
|
||||
multiple = index - 1
|
||||
addition = 8;
|
||||
multiple = index - 1;
|
||||
}
|
||||
y =
|
||||
viewConfig.topKeysPos +
|
||||
symbolArrowHeight * 1.5 +
|
||||
(2 + multiple * 1.5) * viewConfig.X_OFFSET +
|
||||
addition
|
||||
addition;
|
||||
} else {
|
||||
if (index >= dotIndex) {
|
||||
addition = 9
|
||||
multiple = index - 1
|
||||
addition = 9;
|
||||
multiple = index - 1;
|
||||
}
|
||||
y =
|
||||
viewConfig.bottomKeysPosStart -
|
||||
(2 + (value.length - multiple) * 1.5) * viewConfig.X_OFFSET +
|
||||
addition
|
||||
addition;
|
||||
}
|
||||
return `
|
||||
<tspan rotate="90" x="${scale(item.index) +
|
||||
viewConfig.X_OFFSET -
|
||||
4}"
|
||||
y="${y}">${d}</tspan>`
|
||||
<tspan rotate="90" x="${scale(item.index) + viewConfig.X_OFFSET - 4}"
|
||||
y="${y}">${d}</tspan>`;
|
||||
})
|
||||
.join('')
|
||||
.join('');
|
||||
})
|
||||
.attr('x', (item, i) => {
|
||||
return scale(item.index) + viewConfig.X_OFFSET - 4
|
||||
return scale(item.index) + viewConfig.X_OFFSET - 4;
|
||||
})
|
||||
.attr('y', item => {
|
||||
.attr('y', (item) => {
|
||||
if (item.ismax) {
|
||||
return (
|
||||
viewConfig.topKeysPos + symbolArrowHeight * 1.5 + LINE_HEIGHT / 2
|
||||
)
|
||||
return viewConfig.topKeysPos + symbolArrowHeight * 1.5 + LINE_HEIGHT / 2;
|
||||
} else {
|
||||
return (
|
||||
viewConfig.bottomKeysPosStart -
|
||||
symbolArrowHeight / 2 -
|
||||
LINE_HEIGHT / 2
|
||||
)
|
||||
return viewConfig.bottomKeysPosStart - symbolArrowHeight / 2 - LINE_HEIGHT / 2;
|
||||
}
|
||||
})
|
||||
.attr('style', item => {
|
||||
return `font-size:14px;fill:${
|
||||
item.ismax ? 'red' : 'blue'
|
||||
};font-weight: bold;`
|
||||
})
|
||||
.attr('style', (item) => {
|
||||
return `font-size:14px;fill:${item.ismax ? 'red' : 'blue'};font-weight: bold;`;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -5,14 +5,13 @@
|
||||
* @LastEditors: 程堡
|
||||
* @Description: 体温单
|
||||
* @FilePath: src\action\nurseStation\temperatureSheet\index.js
|
||||
*/
|
||||
import Request from '@/axios/index.js'
|
||||
const temperaturePath = 'app/temperature'
|
||||
const getTemperaturePath = 'app/temperature/by-encounter-id'
|
||||
const delTemperaturePath = 'app/temperature/retired'
|
||||
*/
|
||||
import Request from '@/axios/index.js';
|
||||
const temperaturePath = 'app/temperature';
|
||||
const getTemperaturePath = 'app/temperature/by-encounter-id';
|
||||
const delTemperaturePath = 'app/temperature/retired';
|
||||
// import data from '../temperatureSheet/datas.js';
|
||||
export const API = {
|
||||
|
||||
/**
|
||||
* @description 查询患者体温单
|
||||
* @param encounterId
|
||||
@@ -23,27 +22,24 @@ export const API = {
|
||||
method: 'get', // 提交方法get
|
||||
verification: true, // 是否统一拦截验证
|
||||
untoken: false, // 是否不带token
|
||||
params: { // 参数列表
|
||||
id
|
||||
}
|
||||
})
|
||||
params: {
|
||||
// 参数列表
|
||||
id,
|
||||
},
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @description 创建体温单
|
||||
* @param encounterId
|
||||
*/
|
||||
createTemperature(encounterId,
|
||||
hisNo,
|
||||
clinicCode,
|
||||
recordTime,
|
||||
type,
|
||||
content) {
|
||||
createTemperature(encounterId, hisNo, clinicCode, recordTime, type, content) {
|
||||
return Request({
|
||||
url: temperaturePath,
|
||||
method: 'post',
|
||||
verification: true,
|
||||
untoken: false,
|
||||
data: { // 参数列表
|
||||
data: {
|
||||
// 参数列表
|
||||
encounterId,
|
||||
hisNo,
|
||||
clinicCode,
|
||||
@@ -52,28 +48,23 @@ export const API = {
|
||||
operName: sessionStorage.getItem('userName'),
|
||||
type,
|
||||
content,
|
||||
hospitalOrgId: sessionStorage.getItem('hospitalOrgId')
|
||||
}
|
||||
})
|
||||
hospitalOrgId: sessionStorage.getItem('hospitalOrgId'),
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @description 修改体温单
|
||||
* @param encounterId
|
||||
*/
|
||||
updateTemperature(encounterId,
|
||||
hisNo,
|
||||
clinicCode,
|
||||
recordTime,
|
||||
type,
|
||||
content,
|
||||
id) {
|
||||
updateTemperature(encounterId, hisNo, clinicCode, recordTime, type, content, id) {
|
||||
return Request({
|
||||
url: temperaturePath,
|
||||
method: 'put',
|
||||
verification: true,
|
||||
untoken: false,
|
||||
data: { // 参数列表
|
||||
data: {
|
||||
// 参数列表
|
||||
encounterId,
|
||||
hisNo,
|
||||
clinicCode,
|
||||
@@ -82,9 +73,9 @@ export const API = {
|
||||
operName: sessionStorage.getItem('userName'),
|
||||
type,
|
||||
content,
|
||||
id
|
||||
}
|
||||
})
|
||||
id,
|
||||
},
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @description 删除记录
|
||||
@@ -96,10 +87,11 @@ export const API = {
|
||||
method: 'post',
|
||||
verification: true,
|
||||
untoken: false,
|
||||
data: { // 参数列表
|
||||
id
|
||||
}
|
||||
})
|
||||
data: {
|
||||
// 参数列表
|
||||
id,
|
||||
},
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @description 获取患者时间线
|
||||
@@ -107,24 +99,22 @@ export const API = {
|
||||
*/
|
||||
NewSheet(patientInfo) {
|
||||
return {
|
||||
grParamBOS:
|
||||
{
|
||||
age: patientInfo.age,
|
||||
birth: 868723200000,
|
||||
cwh: patientInfo.bedName,
|
||||
cardNo: patientInfo.hisId,
|
||||
hospDate: patientInfo.firstInBedTime.substring(0, 10),
|
||||
inDate: patientInfo.firstInBedTime,
|
||||
inDiagName: patientInfo.diag,
|
||||
name: patientInfo.patientName,
|
||||
deptName: patientInfo.deptName,
|
||||
operaDays: null,
|
||||
outdate: patientInfo.checkOutWardTime,
|
||||
sex: patientInfo.gender.display
|
||||
},
|
||||
grParamBOS: {
|
||||
age: patientInfo.age,
|
||||
birth: 868723200000,
|
||||
cwh: patientInfo.bedName,
|
||||
cardNo: patientInfo.hisId,
|
||||
hospDate: patientInfo.firstInBedTime.substring(0, 10),
|
||||
inDate: patientInfo.firstInBedTime,
|
||||
inDiagName: patientInfo.diag,
|
||||
name: patientInfo.patientName,
|
||||
deptName: patientInfo.deptName,
|
||||
operaDays: null,
|
||||
outdate: patientInfo.checkOutWardTime,
|
||||
sex: patientInfo.gender.display,
|
||||
},
|
||||
rows: [],
|
||||
types: []
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
types: [],
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,264 +1,296 @@
|
||||
// 医院名称
|
||||
// export const HospitalName = '中国人民解放军联勤保障部队第九六四医院'
|
||||
export const HospitalName = ''
|
||||
export const HospitalName = '';
|
||||
// 体温单名称
|
||||
export const temperatureName = '体 温 单'
|
||||
export const temperatureName = '体 温 单';
|
||||
// 患者信息显示项目(修改显示顺序及是否显示)
|
||||
export const INFO_KEYS = [
|
||||
{
|
||||
name: '姓名',
|
||||
key: 'name',
|
||||
order: 1,
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '科室',
|
||||
key: 'deptName',
|
||||
name: '性别',
|
||||
key: 'sex',
|
||||
order: 2,
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '年龄',
|
||||
key: 'age',
|
||||
order: 3,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '病室',
|
||||
key: 'deptName',
|
||||
order: 4,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '床号',
|
||||
key: 'cwh',
|
||||
order: 3,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '病人ID',
|
||||
key: 'patientId',
|
||||
order: 4,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '住院号',
|
||||
key: 'hosNum',
|
||||
order: 5,
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
// {
|
||||
// name: '入院日期',
|
||||
// key: 'hospDate',
|
||||
// order: 6,
|
||||
// show: true
|
||||
// }
|
||||
]
|
||||
{
|
||||
name: '病历号',
|
||||
key: 'hosNum',
|
||||
order: 6,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '入院日期',
|
||||
key: 'hospDate',
|
||||
order: 6,
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '诊断',
|
||||
key: 'inDiagName',
|
||||
order: 8,
|
||||
show: false,
|
||||
},
|
||||
];
|
||||
// 体温单录入项目(修改显示顺序及是否显示)
|
||||
// 新增项目注意 key值、code值唯一性,不要与之前的项目重复
|
||||
export const BOTTOM_KEYS = [
|
||||
{
|
||||
name: '血\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0压',
|
||||
name: '血压(mmHg)',
|
||||
code: 'bloodPressure',
|
||||
key: '008',
|
||||
times: 2,
|
||||
order: 1,
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '大便次数',
|
||||
name: '大\u00A0便\u00A0次\u00A0数',
|
||||
code: 'poop',
|
||||
key: '005',
|
||||
order: 2,
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '体\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0重',
|
||||
code: 'weight',
|
||||
key: '009',
|
||||
order: 3,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '尿\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0量',
|
||||
name: '小\u00A0便\u00A0次\u00A0数',
|
||||
code: 'urine',
|
||||
key: '004',
|
||||
order: 4,
|
||||
show: true
|
||||
order: 3,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '摄入液量',
|
||||
name: '液体总入量(ml)',
|
||||
code: 'input',
|
||||
key: '006',
|
||||
order: 5,
|
||||
show: true
|
||||
order: 4,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '排出液量',
|
||||
name: '其\u00A0\u00A0他(ml)',
|
||||
code: 'output',
|
||||
key: '007',
|
||||
order: 6,
|
||||
show: true
|
||||
order: 5,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '术后天数',
|
||||
code: 'output',
|
||||
key: '010',
|
||||
name: '尿\u00A0\u00A0量(ml)',
|
||||
code: 'urineOutput',
|
||||
key: '011',
|
||||
order: 6,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '体\u00A0\u00A0重(kg)',
|
||||
code: 'weight',
|
||||
key: '009',
|
||||
order: 8,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '身\u00A0\u00A0高(cm)',
|
||||
code: 'height',
|
||||
key: '030',
|
||||
order: 9,
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: 'SPO2',
|
||||
code: 'SPO2',
|
||||
key: '021',
|
||||
times: 2,
|
||||
order: 10,
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
name: '皮\u00A0试\u00A0阳\u00A0性',
|
||||
code: 'allergy',
|
||||
key: '017',
|
||||
order: 11,
|
||||
show: true,
|
||||
lines: 2,
|
||||
},
|
||||
{
|
||||
name: '过\u00A0敏\u00A0试\u00A0验',
|
||||
code: 'allergyTest',
|
||||
key: '020',
|
||||
order: 12,
|
||||
show: false,
|
||||
lines: 2,
|
||||
},
|
||||
{
|
||||
name: '其\u00A0\u00A0他',
|
||||
code: 'other',
|
||||
key: '025',
|
||||
order: 7,
|
||||
show: true
|
||||
show: false,
|
||||
lines: 2,
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
code: 'useless1',
|
||||
key: '100',
|
||||
order: 20,
|
||||
show: true
|
||||
show: true,
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
code: 'useless2',
|
||||
key: '100',
|
||||
order: 21,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
code: 'useless3',
|
||||
key: '100',
|
||||
order: 22,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
code: 'useless4',
|
||||
key: '100',
|
||||
order: 23,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
code: 'useless5',
|
||||
key: '100',
|
||||
order: 24,
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '',
|
||||
code: 'useless6',
|
||||
key: '100',
|
||||
order: 25,
|
||||
show: true
|
||||
}
|
||||
]
|
||||
];
|
||||
// 是否显示疼痛评分
|
||||
export const showPainFlag = true
|
||||
export const showPainFlag = true;
|
||||
|
||||
/** *********** 以上信息是本地化可以修改的部分 **************************/
|
||||
// 获取患者信息显示项目
|
||||
export function getInfoKeys() {
|
||||
return INFO_KEYS.filter(x => x.show).sort((a, b) => a.order - b.order)
|
||||
return INFO_KEYS.filter((x) => x.show).sort((a, b) => a.order - b.order);
|
||||
}
|
||||
// 获取患者信息显示项目
|
||||
export function getBottomKeys() {
|
||||
return BOTTOM_KEYS.filter(x => x.show).sort((a, b) => a.order - b.order)
|
||||
return BOTTOM_KEYS.filter((x) => x.show).sort((a, b) => a.order - b.order);
|
||||
}
|
||||
|
||||
export const timeNumber = [2, 6, 10, 14, 18, 22] // 时间展示
|
||||
export const nightTime = [2, 18, 22] // 夜间红色高亮时间
|
||||
export const timeNumber = [2, 6, 10, 14, 18, 22]; // 时间展示
|
||||
export const nightTime = [2, 18, 22]; // 夜间红色高亮时间
|
||||
export const leftTEXT = [
|
||||
['脉搏,(次/分),180', '160', '140', '120', '100', '80', '60', '40'],
|
||||
['体温,(℃), 42', '41', '40', '39', '38', '37', '36', '35']
|
||||
]
|
||||
['体温,(℃), 42', '41', '40', '39', '38', '37', '36', '35'],
|
||||
];
|
||||
|
||||
export const inOutItem = ['入观', '分娩', '手术', '转入', '出观', '死亡']
|
||||
export const otherItem = ['外出', '请假', '拒测', '离院', '其他']
|
||||
export const inOutItem = ['入观', '分娩', '手术', '转入', '出观', '死亡'];
|
||||
export const otherItem = ['外出', '请假', '拒测', '离院', '其他'];
|
||||
export const sheetOptions = {
|
||||
locations: [{
|
||||
code: '1',
|
||||
display: '体温'
|
||||
}, {
|
||||
code: '2',
|
||||
display: '口温'
|
||||
}, {
|
||||
code: '3',
|
||||
display: '肛温'
|
||||
}, {
|
||||
code: '4',
|
||||
display: '耳温'
|
||||
}],
|
||||
breath: [{
|
||||
code: '',
|
||||
display: '自主呼吸'
|
||||
}, {
|
||||
code: '®',
|
||||
display: '机械通气'
|
||||
}],
|
||||
poop: [{
|
||||
code: '',
|
||||
display: '正常'
|
||||
}, {
|
||||
code: '※',
|
||||
display: '失禁'
|
||||
}, {
|
||||
code: '☆',
|
||||
display: '人工肛门'
|
||||
}, {
|
||||
code: '/E',
|
||||
display: '灌肠'
|
||||
}],
|
||||
pee: [{
|
||||
code: '',
|
||||
display: '正常'
|
||||
}, {
|
||||
code: '※',
|
||||
display: '失禁'
|
||||
}, {
|
||||
code: 'C+',
|
||||
display: '导尿'
|
||||
}],
|
||||
locations: [
|
||||
{
|
||||
code: '1',
|
||||
display: '体温',
|
||||
},
|
||||
{
|
||||
code: '2',
|
||||
display: '口温',
|
||||
},
|
||||
{
|
||||
code: '3',
|
||||
display: '肛温',
|
||||
},
|
||||
{
|
||||
code: '4',
|
||||
display: '耳温',
|
||||
},
|
||||
],
|
||||
breath: [
|
||||
{
|
||||
code: '',
|
||||
display: '自主呼吸',
|
||||
},
|
||||
{
|
||||
code: '®',
|
||||
display: '机械通气',
|
||||
},
|
||||
],
|
||||
poop: [
|
||||
{
|
||||
code: '',
|
||||
display: '正常',
|
||||
},
|
||||
{
|
||||
code: '※',
|
||||
display: '失禁',
|
||||
},
|
||||
{
|
||||
code: '☆',
|
||||
display: '人工肛门',
|
||||
},
|
||||
{
|
||||
code: '/E',
|
||||
display: '灌肠',
|
||||
},
|
||||
],
|
||||
pee: [
|
||||
{
|
||||
code: '',
|
||||
display: '正常',
|
||||
},
|
||||
{
|
||||
code: '※',
|
||||
display: '失禁',
|
||||
},
|
||||
{
|
||||
code: 'C+',
|
||||
display: '导尿',
|
||||
},
|
||||
],
|
||||
heart: ['窦性心律', '起搏心律', '房性心律', '异常心律'],
|
||||
weight: ['正常', '卧床', '轮椅', '平车']
|
||||
}
|
||||
weight: ['正常', '卧床', '轮椅', '平车'],
|
||||
};
|
||||
// 此处是显示数字的 要和leftTEXT保持一直
|
||||
export const bodyTemperature = [34, 42]
|
||||
export const starNumEnv = bodyTemperature[0] // 开始体温
|
||||
export const endNumEnv = bodyTemperature[1] // 结束体温
|
||||
export const heartRange = [20, 180]
|
||||
export const bodyTemperature = [34, 42];
|
||||
export const starNumEnv = bodyTemperature[0]; // 开始体温
|
||||
export const endNumEnv = bodyTemperature[1]; // 结束体温
|
||||
export const heartRange = [20, 180];
|
||||
|
||||
// 中间图表字段对应
|
||||
export const CHART_KEYS = [
|
||||
{
|
||||
key: '001',
|
||||
code: 'breath',
|
||||
name: '呼吸'
|
||||
name: '呼吸',
|
||||
},
|
||||
{
|
||||
key: '002',
|
||||
code: 'sphygmus',
|
||||
name: '脉搏'
|
||||
name: '脉搏',
|
||||
},
|
||||
{
|
||||
key: '003',
|
||||
code: 'temperature',
|
||||
name: '不升'
|
||||
name: '不升',
|
||||
},
|
||||
{
|
||||
key: '012',
|
||||
code: 'inOut',
|
||||
name: '特殊标记'
|
||||
name: '特殊标记',
|
||||
},
|
||||
{
|
||||
key: '013',
|
||||
code: 'refuse',
|
||||
name: '标记内容'
|
||||
name: '标记内容',
|
||||
},
|
||||
{
|
||||
key: '014',
|
||||
code: 'heartRate',
|
||||
name: '心率'
|
||||
name: '心率',
|
||||
},
|
||||
{
|
||||
key: '015',
|
||||
code: 'lowerTemp',
|
||||
name: '物理降温'
|
||||
name: '物理降温',
|
||||
},
|
||||
{
|
||||
key: '016',
|
||||
code: 'painScore',
|
||||
name: '疼痛评分'
|
||||
}
|
||||
]
|
||||
name: '疼痛评分',
|
||||
},
|
||||
];
|
||||
|
||||
export const HEAD_HEIGHT = 120 // 头部文字预留位置
|
||||
export const LINE_HEIGHT = 20 // 一行的行高
|
||||
export const textLeftMargin = 4 // 文字左边边距
|
||||
export const TEXT_MARGIN_BOTTOM = 6 // 文字向上偏移量
|
||||
export const symbolArrowHeight = 20
|
||||
export const HEAD_HEIGHT = 120; // 头部文字预留位置
|
||||
export const LINE_HEIGHT = 20; // 一行的行高
|
||||
export const textLeftMargin = 4; // 文字左边边距
|
||||
export const TEXT_MARGIN_BOTTOM = 6; // 文字向上偏移量
|
||||
export const symbolArrowHeight = 20;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import moment from 'moment'
|
||||
import moment from 'moment';
|
||||
|
||||
export function getG(svg, translateX, translateY) {
|
||||
return svg
|
||||
.append('g')
|
||||
.attr('transform', `translate(${translateX},${translateY})`)
|
||||
return svg.append('g').attr('transform', `translate(${translateX},${translateY})`);
|
||||
}
|
||||
|
||||
// function generatePointer ({ pathData, type, yScaleInstance }) {
|
||||
@@ -51,247 +49,259 @@ export function getG(svg, translateX, translateY) {
|
||||
// }
|
||||
// }
|
||||
export function getTypeDatas(typeData, beginDate) {
|
||||
const types = typeData.sort((a, b) => new Date(a.date) - new Date(b.date))
|
||||
return types.map(item => {
|
||||
const types = typeData.sort((a, b) => new Date(a.date) - new Date(b.date));
|
||||
return types.map((item) => {
|
||||
return {
|
||||
index: getIndex(beginDate, item.date, '00:00:00') / 6,
|
||||
times: 0,
|
||||
date: item.date,
|
||||
typeCode: item.typeCode,
|
||||
typeValue: (item.typeValue) || null
|
||||
}
|
||||
})
|
||||
typeValue: item.typeValue || null,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export function getTypeData(type, allData = [], isNumber = true, beginDate) {
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type
|
||||
}) || {}
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date,
|
||||
value: (isNumber ? +cur.typeValue : cur.typeValue) || null
|
||||
}
|
||||
value: (isNumber ? +cur.typeValue : cur.typeValue) || null,
|
||||
};
|
||||
})
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
return getList.sort((a, b) => a.index - b.index)
|
||||
return item;
|
||||
});
|
||||
return getList.sort((a, b) => a.index - b.index);
|
||||
}
|
||||
// 获取不升
|
||||
export function getType(type, allData = [], beginDate) {
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type
|
||||
}) || {}
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date,
|
||||
value: cur.typeValue !== '' ? (parseFloat(cur.typeValue) <= 35 ? '不升' : null) : null
|
||||
}
|
||||
value: cur.typeValue !== '' ? (parseFloat(cur.typeValue) <= 35 ? '不升' : null) : null,
|
||||
};
|
||||
})
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
return getList.sort((a, b) => a.index - b.index)
|
||||
return item;
|
||||
});
|
||||
return getList.sort((a, b) => a.index - b.index);
|
||||
}
|
||||
// 合并标记内容
|
||||
export function setMergeTag(ymbolTextArr = [], symbolContent = []) {
|
||||
const arr = []
|
||||
ymbolTextArr.forEach(item => {
|
||||
symbolContent.forEach(res => {
|
||||
const arr = [];
|
||||
ymbolTextArr.forEach((item) => {
|
||||
symbolContent.forEach((res) => {
|
||||
if (item.index === res.index) {
|
||||
arr.push({ ...item, ...res, value: (item.value !== null ? item.value : '') + (res.value !== null ? res.value : '') })
|
||||
arr.push({
|
||||
...item,
|
||||
...res,
|
||||
value: (item.value !== null ? item.value : '') + (res.value !== null ? res.value : ''),
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
return arr
|
||||
});
|
||||
});
|
||||
return arr;
|
||||
}
|
||||
// 筛选手术产后日数
|
||||
export function postpartumDays(type, arr) {
|
||||
return arr.filter(item => item.typeCode === type).map(i => i.typeValue)
|
||||
return arr.filter((item) => item.typeCode === type).map((i) => i.typeValue);
|
||||
}
|
||||
// 筛选体温
|
||||
export function getTypeAnimalHeat(type, allData = [], code, beginDate) {
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
console.log(rowBOSItem.rowBOS, 'rowBOSItem.rowBOS')
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const curList = // 改为 filter 来获取所有符合条件的项
|
||||
rowBOS.filter((item) => {
|
||||
return item.typeCode === type
|
||||
}) || []
|
||||
|
||||
// 针对每个 cur 处理并生成新的对象数组
|
||||
return curList.map((cur) => ({
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date,
|
||||
value: (+cur.collectionMode === +code ? +cur.typeValue : null) || null
|
||||
}))
|
||||
value: (+cur.collectionMode === +code ? +cur.typeValue : null) || null,
|
||||
};
|
||||
})
|
||||
.flat() // 将二维数组展平为一维数组
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
console.log(getList, 'getList')
|
||||
return getList.sort((a, b) => a.index - b.index)
|
||||
return item;
|
||||
});
|
||||
return getList.sort((a, b) => a.index - b.index);
|
||||
}
|
||||
// 设置折线
|
||||
export function getBrokenLine(type, allData = [], arr = [], list = [], topList = [], beginDate) {
|
||||
const result = []
|
||||
const result = [];
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type
|
||||
}) || {}
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date,
|
||||
value: +cur.typeValue
|
||||
}
|
||||
value: +cur.typeValue,
|
||||
};
|
||||
})
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
const _a = arr.filter(item => item.value)
|
||||
const _b = list.filter(item => item.value)
|
||||
const _c = topList.filter(item => item.value)
|
||||
const mergingData = [..._a, ..._b, ..._c, { index: 50 }].sort((a, b) => a.index - b.index)
|
||||
let start = 0
|
||||
mergingData.forEach(item => {
|
||||
const _p = getList.sort((a, b) => a.index - b.index).slice(start, item.index)
|
||||
start = item.index + 1
|
||||
result.push(_p)
|
||||
})
|
||||
return result
|
||||
return item;
|
||||
});
|
||||
const _a = arr.filter((item) => item.value);
|
||||
const _b = list.filter((item) => item.value);
|
||||
const _c = topList.filter((item) => item.value);
|
||||
const mergingData = [..._a, ..._b, ..._c, { index: 50 }].sort((a, b) => a.index - b.index);
|
||||
let start = 0;
|
||||
mergingData.forEach((item) => {
|
||||
const _p = getList.sort((a, b) => a.index - b.index).slice(start, item.index);
|
||||
start = item.index + 1;
|
||||
result.push(_p);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
// 处理脉搏心率
|
||||
export function getHeartRate(type, allData = [], arr = [], topList = [], isNumber = true, beginDate) {
|
||||
const result = []
|
||||
export function getHeartRate(
|
||||
type,
|
||||
allData = [],
|
||||
arr = [],
|
||||
topList = [],
|
||||
isNumber = true,
|
||||
beginDate
|
||||
) {
|
||||
const result = [];
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type
|
||||
}) || {}
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date,
|
||||
value: (isNumber ? +cur.typeValue : cur.typeValue) || null
|
||||
}
|
||||
value: (isNumber ? +cur.typeValue : cur.typeValue) || null,
|
||||
};
|
||||
})
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
const _a = arr.filter(item => item.value)
|
||||
const _c = topList.filter(item => item.value)
|
||||
const mergingData = [..._a, ..._c, { index: 50 }].sort((a, b) => a.index - b.index)
|
||||
let start = 0
|
||||
mergingData.forEach(item => {
|
||||
const _p = getList.slice(start, item.index).sort((a, b) => { return a.index - b.index })
|
||||
start = item.index
|
||||
result.push(_p)
|
||||
})
|
||||
return result
|
||||
return item;
|
||||
});
|
||||
const _a = arr.filter((item) => item.value);
|
||||
const _c = topList.filter((item) => item.value);
|
||||
const mergingData = [..._a, ..._c, { index: 50 }].sort((a, b) => a.index - b.index);
|
||||
let start = 0;
|
||||
mergingData.forEach((item) => {
|
||||
const _p = getList.slice(start, item.index).sort((a, b) => {
|
||||
return a.index - b.index;
|
||||
});
|
||||
start = item.index;
|
||||
result.push(_p);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
function getIndex(beginDate, date, time) {
|
||||
if (beginDate === undefined || date === undefined) return
|
||||
const diffTime = moment(date.substring(0, 10)).diff(moment(beginDate.substring(0, 10))) / 1000 / 3600 / 24
|
||||
const diffIndex = parseInt(time.substring(0, 2))
|
||||
return diffTime * 6 + Math.floor(diffIndex / 4)
|
||||
if (beginDate === undefined || date === undefined) return;
|
||||
const diffTime =
|
||||
moment(date.substring(0, 10)).diff(moment(beginDate.substring(0, 10))) / 1000 / 3600 / 24;
|
||||
const diffIndex = parseInt(time.substring(0, 2));
|
||||
return diffTime * 6 + Math.floor(diffIndex / 4);
|
||||
}
|
||||
// 筛选35和40~42数据
|
||||
export function degreesOnline(allData, data, type) {
|
||||
const arr = allData.map((item, index) => {
|
||||
const cur = data?.find(res => item.value === res.name && +res.isShowPlace === type) || null
|
||||
const cur = data?.find((res) => item.value === res.name && +res.isShowPlace === type) || null;
|
||||
return {
|
||||
index: index,
|
||||
date: item.date,
|
||||
value: cur?.name || null
|
||||
}
|
||||
})
|
||||
return arr
|
||||
value: cur?.name || null,
|
||||
};
|
||||
});
|
||||
return arr;
|
||||
}
|
||||
// 35或42上断开的事件
|
||||
export function disconnectEvents(allData, data, code, type) {
|
||||
const arr = allData.map((item, index) => {
|
||||
const cur = data?.find(res => item.value === res.name && +res.isShowPlace === type && +res[code] === 1) || null
|
||||
const cur =
|
||||
data?.find(
|
||||
(res) => item.value === res.name && +res.isShowPlace === type && +res[code] === 1
|
||||
) || null;
|
||||
return {
|
||||
index: index,
|
||||
date: item.date,
|
||||
value: cur?.name || null
|
||||
}
|
||||
})
|
||||
return arr
|
||||
value: cur?.name || null,
|
||||
};
|
||||
});
|
||||
return arr;
|
||||
}
|
||||
|
||||
export function getDrawCoolData(type, allData = [], isNumber = true, beginDate) {
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type
|
||||
}) || {}
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date + cur.times,
|
||||
value: (isNumber ? +cur.typeValue : cur.typeValue) || null
|
||||
}
|
||||
value: (isNumber ? +cur.typeValue : cur.typeValue) || null,
|
||||
};
|
||||
})
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
return getList.sort((a, b) => a.index - b.index)
|
||||
return item;
|
||||
});
|
||||
return getList.sort((a, b) => a.index - b.index);
|
||||
}
|
||||
// 筛选降温getDrawData
|
||||
export function getDrawData(type, allData = [], code, beginDate) {
|
||||
const getList = allData
|
||||
.map((rowBOSItem, index) => {
|
||||
const rowBOS = rowBOSItem.rowBOS
|
||||
const rowBOS = rowBOSItem.rowBOS;
|
||||
const cur =
|
||||
rowBOS.find((item) => {
|
||||
return item.typeCode === type
|
||||
}) || {}
|
||||
return item.typeCode === type;
|
||||
}) || {};
|
||||
return {
|
||||
index: getIndex(beginDate, cur.date, cur.times),
|
||||
date: cur.date + cur.times,
|
||||
value: (+cur.collectionMode === +code ? +cur.typeValue : null) || null
|
||||
}
|
||||
value: (+cur.collectionMode === +code ? +cur.typeValue : null) || null,
|
||||
};
|
||||
})
|
||||
.map((item) => {
|
||||
if (item.value) {
|
||||
// item.value = NaN
|
||||
}
|
||||
return item
|
||||
})
|
||||
return getList.sort((a, b) => a.index - b.index)
|
||||
return item;
|
||||
});
|
||||
return getList.sort((a, b) => a.index - b.index);
|
||||
}
|
||||
|
||||
@@ -45,22 +45,45 @@ export function getSupplierList(data) {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取项目定价方式,批次售价/统一售价
|
||||
*/
|
||||
export function getAdjustPriceSwitchState(params) {
|
||||
return request({
|
||||
url: '/change/price/getAdjustPriceSwitchState',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批次号匹配
|
||||
*/
|
||||
export function lotNumberMatch(params) {
|
||||
return request({
|
||||
url: '/app-common/lot-number-match',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
import axios from 'axios';
|
||||
|
||||
const env = import.meta.env.MODE;
|
||||
export function invokeYbPlugin(data) {
|
||||
|
||||
if(env == 'development'){
|
||||
return axios.create(
|
||||
{
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: '/ybplugin',//ybplugin
|
||||
// 超时
|
||||
timeout: 60000
|
||||
}
|
||||
).post('/api/data/', data);
|
||||
// if(env == 'development'){
|
||||
// return axios.create(
|
||||
// {
|
||||
// // axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
// baseURL: '/ybplugin',//ybplugin
|
||||
// // 超时
|
||||
// timeout: 60000
|
||||
// }
|
||||
// ).post('/api/data/', data);
|
||||
|
||||
} else {
|
||||
// } else {
|
||||
return axios.create(
|
||||
{
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
@@ -70,4 +93,4 @@ if(env == 'development'){
|
||||
}
|
||||
).post('http://localhost:5000/api/data/', data);
|
||||
}
|
||||
}
|
||||
// }
|
||||
|
||||
@@ -212,4 +212,4 @@ aside {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="recordBill">
|
||||
<div :id="'exeSheetTitle' + printData.id" class="printView_header">
|
||||
<div style="text-align: center; height: 60px">
|
||||
呼和浩特市第一医院医嘱执行单
|
||||
长春市朝阳区中医院医嘱执行单
|
||||
</div>
|
||||
<div>
|
||||
<span style="display: inline-block; width: 100px">床号:{{ printData.patientInfo.encounterLocationName }}</span>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="recordBill">
|
||||
<div id="div1" class="printView_header">
|
||||
<div style="text-align: center; font-size: 20px; height: 40px">
|
||||
呼和浩特市第一医院输液执行单
|
||||
长春市朝阳区中医院输液执行单
|
||||
</div>
|
||||
<div>
|
||||
<span>座位:{{ printData.patientInfo.encounterLocationName }}</span>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="printTicket">
|
||||
<p>xx人民医院</p>
|
||||
<p>长春市朝阳区中医院</p>
|
||||
<div>
|
||||
<span>姓名:</span>
|
||||
<span>{{ printData.patientName }}</span>
|
||||
@@ -21,11 +21,11 @@
|
||||
<span>分诊时间:</span>
|
||||
<span>{{ printData.triageTime }}</span>
|
||||
</div>
|
||||
<img ref="refQr" style="position: absolute; top: 10px; left: 100px">
|
||||
<img ref="refQr" style="position: absolute; top: 10px; left: 100px" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import JsBarcode from 'jsbarcode'
|
||||
import JsBarcode from 'jsbarcode';
|
||||
export default {
|
||||
name: 'TriageTicket',
|
||||
props: {
|
||||
@@ -37,41 +37,33 @@ export default {
|
||||
dept: '',
|
||||
triageLevel: '',
|
||||
triageTime: '',
|
||||
hisId: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
hisId: '',
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
return {};
|
||||
},
|
||||
updated() {
|
||||
JsBarcode(this.$refs.refQr,
|
||||
this.printData.hisId,
|
||||
{
|
||||
format: 'CODE128',
|
||||
lineColor: '#000',
|
||||
background: '#fff',
|
||||
displayValue: false,
|
||||
height: 30,
|
||||
margin: 2
|
||||
})
|
||||
JsBarcode(this.$refs.refQr, this.printData.hisId, {
|
||||
format: 'CODE128',
|
||||
lineColor: '#000',
|
||||
background: '#fff',
|
||||
displayValue: false,
|
||||
height: 30,
|
||||
margin: 2,
|
||||
});
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
|
||||
}
|
||||
}
|
||||
mounted() {},
|
||||
methods: {},
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
.printTicket{
|
||||
display: block;
|
||||
width: 300px;
|
||||
height: 200px;
|
||||
border: 1px solid #A3A3A3;
|
||||
}
|
||||
|
||||
.printTicket {
|
||||
display: block;
|
||||
width: 300px;
|
||||
height: 200px;
|
||||
border: 1px solid #a3a3a3;
|
||||
}
|
||||
</style>
|
||||
|
||||
338
openhis-ui-vue3/src/components/Print/AdvancePayment.json
Normal file
338
openhis-ui-vue3/src/components/Print/AdvancePayment.json
Normal file
@@ -0,0 +1,338 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 0,
|
||||
"name": 1,
|
||||
"paperType": "自定义",
|
||||
"height": 80,
|
||||
"width": 279,
|
||||
"paperList": {
|
||||
"type": "自定义",
|
||||
"width": 279,
|
||||
"height": 80
|
||||
},
|
||||
"panelPageRule": "none",
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 422.3622047244095,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.7,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "36px",
|
||||
"rotate": 25,
|
||||
"width": 413,
|
||||
"height": 310,
|
||||
"timestamp": true,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 15,
|
||||
"height": 16.5,
|
||||
"width": 792,
|
||||
"title": "长春市朝阳区中医院预交金收据",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontWeight": "bold",
|
||||
"letterSpacing": 0.75,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 15,
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 46.5,
|
||||
"height": 14,
|
||||
"width": 151.5,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 295.5,
|
||||
"top": 48,
|
||||
"height": 14,
|
||||
"width": 148.5,
|
||||
"title": "住院号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "encounterNosd",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 480,
|
||||
"top": 48,
|
||||
"height": 14,
|
||||
"width": 162,
|
||||
"title": "科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "inHospitalOrgName",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 73.5,
|
||||
"height": 14,
|
||||
"width": 153,
|
||||
"title": "ID号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientId",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 295.5,
|
||||
"top": 73.5,
|
||||
"height": 14,
|
||||
"width": 147,
|
||||
"title": "医保类别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 480,
|
||||
"top": 73.5,
|
||||
"height": 14,
|
||||
"width": 163.5,
|
||||
"title": "时间",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "currentTime",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 105,
|
||||
"height": 25,
|
||||
"width": 120,
|
||||
"title": "金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"textAlign": "center",
|
||||
"textContentVerticalAlign": "middle",
|
||||
"borderLeft": "solid",
|
||||
"borderTop": "solid",
|
||||
"borderRight": "solid",
|
||||
"borderBottom": "solid",
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 231,
|
||||
"top": 105,
|
||||
"height": 25,
|
||||
"width": 393,
|
||||
"title": "金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"textAlign": "center",
|
||||
"textContentVerticalAlign": "middle",
|
||||
"borderTop": "solid",
|
||||
"borderRight": "solid",
|
||||
"borderBottom": "solid",
|
||||
"qrCodeLevel": 0,
|
||||
"field": "balanceAmount",
|
||||
"hideTitle": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 129,
|
||||
"height": 30,
|
||||
"width": 120,
|
||||
"title": "人民币(大写)",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"textAlign": "center",
|
||||
"textContentVerticalAlign": "middle",
|
||||
"borderLeft": "solid",
|
||||
"borderTop": "solid",
|
||||
"borderRight": "solid",
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 231,
|
||||
"top": 129,
|
||||
"height": 30,
|
||||
"width": 393,
|
||||
"title": "金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"textAlign": "center",
|
||||
"textContentVerticalAlign": "middle",
|
||||
"borderTop": "solid",
|
||||
"borderRight": "solid",
|
||||
"qrCodeLevel": 0,
|
||||
"field": "amountInWords",
|
||||
"hideTitle": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 159,
|
||||
"height": 30,
|
||||
"width": 513,
|
||||
"title": " ",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"textAlign": "center",
|
||||
"textContentVerticalAlign": "middle",
|
||||
"borderLeft": "solid",
|
||||
"borderRight": "solid",
|
||||
"borderBottom": "solid",
|
||||
"qrCodeLevel": 0,
|
||||
"field": "paymentDetails",
|
||||
"hideTitle": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 198,
|
||||
"height": 14,
|
||||
"width": 120,
|
||||
"title": "签章",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientNamesfs",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 297,
|
||||
"top": 198,
|
||||
"height": 14,
|
||||
"width": 132,
|
||||
"title": "交款人",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientNameada",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 481.5,
|
||||
"top": 198,
|
||||
"height": 14,
|
||||
"width": 124.5,
|
||||
"title": "收款人",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "cashier",
|
||||
"fontFamily": "Microsoft YaHei"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
1692
openhis-ui-vue3/src/components/Print/DailyOutpatientSettlement.json
Normal file
1692
openhis-ui-vue3/src/components/Print/DailyOutpatientSettlement.json
Normal file
File diff suppressed because it is too large
Load Diff
454
openhis-ui-vue3/src/components/Print/Disposal copy.json
Normal file
454
openhis-ui-vue3/src/components/Print/Disposal copy.json
Normal file
@@ -0,0 +1,454 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A5",
|
||||
"height": 210,
|
||||
"width": 148,
|
||||
"paperList": {
|
||||
"type": "A5",
|
||||
"width": 148,
|
||||
"height": 210
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 592.4409448818898,
|
||||
"orient": 1,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.01,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "10px",
|
||||
"rotate": 25,
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"timestamp": false,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 420,
|
||||
"title": "长春市朝阳区中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 50,
|
||||
"height": 20,
|
||||
"width": 420,
|
||||
"title": "处置单",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 154.5,
|
||||
"top": 75,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 75,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 76.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 100.5,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "开单医生",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 27,
|
||||
"top": 102,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "departmentName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 154.5,
|
||||
"top": 102,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "费用性质",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 130.5,
|
||||
"height": 13.5,
|
||||
"width": 174,
|
||||
"title": "门诊号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "encounterNo",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 222,
|
||||
"top": 130.5,
|
||||
"height": 13.5,
|
||||
"width": 165,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 156,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28,
|
||||
"top": 166.5,
|
||||
"height": 9.75,
|
||||
"width": 120,
|
||||
"title": "Rp",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true,
|
||||
"fontSize": 18,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 15,
|
||||
"top": 190.5,
|
||||
"height": 36,
|
||||
"width": 390,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"textAlign": "center",
|
||||
"tableBorder": "border",
|
||||
"tableHeaderFontWeight": "500",
|
||||
"field": "prescriptionList",
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "项目名",
|
||||
"width": 116.47241770689429,
|
||||
"field": "itemName",
|
||||
"checked": true,
|
||||
"columnId": "itemName",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "单价",
|
||||
"width": 95.6749835266735,
|
||||
"field": "unitPrice",
|
||||
"checked": true,
|
||||
"columnId": "unitPrice",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"width": 87.60415049837947,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "执行次数",
|
||||
"width": 90.24844826805275,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10.5,
|
||||
"top": 508.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "医师",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 509.0000066757202,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "发药:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 214.5,
|
||||
"top": 509.0000066757202,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "划价:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 319,
|
||||
"top": 509.0000066757202,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "调配:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 532.5,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 289,
|
||||
"top": 551.5,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "medTotalAmount",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
454
openhis-ui-vue3/src/components/Print/Disposal.json
Normal file
454
openhis-ui-vue3/src/components/Print/Disposal.json
Normal file
@@ -0,0 +1,454 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A5",
|
||||
"height": 210,
|
||||
"width": 148,
|
||||
"paperList": {
|
||||
"type": "A5",
|
||||
"width": 148,
|
||||
"height": 210
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 592.4409448818898,
|
||||
"orient": 1,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.01,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "10px",
|
||||
"rotate": 25,
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"timestamp": false,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 420,
|
||||
"title": "长春市红旗中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 50,
|
||||
"height": 20,
|
||||
"width": 420,
|
||||
"title": "处置单",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 154.5,
|
||||
"top": 75,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 75,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 76.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 100.5,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "开单医生",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 27,
|
||||
"top": 102,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "departmentName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 154.5,
|
||||
"top": 102,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "费用性质",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 130.5,
|
||||
"height": 13.5,
|
||||
"width": 174,
|
||||
"title": "门诊号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "encounterNo",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 222,
|
||||
"top": 130.5,
|
||||
"height": 13.5,
|
||||
"width": 165,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 156,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28,
|
||||
"top": 166.5,
|
||||
"height": 9.75,
|
||||
"width": 120,
|
||||
"title": "Rp",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true,
|
||||
"fontSize": 18,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 15,
|
||||
"top": 190.5,
|
||||
"height": 36,
|
||||
"width": 390,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"textAlign": "center",
|
||||
"tableBorder": "border",
|
||||
"tableHeaderFontWeight": "500",
|
||||
"field": "prescriptionList",
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "项目名",
|
||||
"width": 116.47241770689429,
|
||||
"field": "itemName",
|
||||
"checked": true,
|
||||
"columnId": "itemName",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "单价",
|
||||
"width": 95.6749835266735,
|
||||
"field": "unitPrice",
|
||||
"checked": true,
|
||||
"columnId": "unitPrice",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"width": 87.60415049837947,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "执行次数",
|
||||
"width": 90.24844826805275,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10.5,
|
||||
"top": 508.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "医师",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 509.0000066757202,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "发药:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 214.5,
|
||||
"top": 509.0000066757202,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "划价:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 319,
|
||||
"top": 509.0000066757202,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "调配:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 532.5,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 289,
|
||||
"top": 551.5,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "medTotalAmount",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,701 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A4",
|
||||
"height": 297,
|
||||
"width": 210,
|
||||
"paperList": {
|
||||
"type": "自定义",
|
||||
"width": 80,
|
||||
"height": 60
|
||||
},
|
||||
"paperHeader": 166.5,
|
||||
"paperFooter": 760.5,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"expandCss": "",
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.7,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "36px",
|
||||
"rotate": 25,
|
||||
"width": 413,
|
||||
"height": 310,
|
||||
"timestamp": true,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 595.5,
|
||||
"title": "长春市朝阳区中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 54.5,
|
||||
"height": 20,
|
||||
"width": 595.5,
|
||||
"title": "门诊病历",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 235.5,
|
||||
"top": 81,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 429,
|
||||
"top": 81,
|
||||
"height": 13.5,
|
||||
"width": 160.5,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 24,
|
||||
"top": 82.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 24,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 190.5,
|
||||
"title": "电话",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "phone"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 235.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 175.5,
|
||||
"title": "医保类型",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 429,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 162,
|
||||
"title": "病历号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "busNo"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 24,
|
||||
"top": 132,
|
||||
"height": 13.5,
|
||||
"width": 200,
|
||||
"title": "就诊日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "onsetDate"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 235.5,
|
||||
"top": 132,
|
||||
"height": 13.5,
|
||||
"width": 175.5,
|
||||
"title": "就诊科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 429,
|
||||
"top": 132,
|
||||
"height": 13.5,
|
||||
"width": 162,
|
||||
"title": "接诊医生",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 163.5,
|
||||
"height": 9,
|
||||
"width": 576,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 171,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "主诉",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 187.5,
|
||||
"height": 33,
|
||||
"width": 550,
|
||||
"title": " ",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "complaint",
|
||||
"lHeight": 50
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 231,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "现病史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 253,
|
||||
"height": 42,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "presentIllness",
|
||||
"title": "无",
|
||||
"lHeight": 30
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 305,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "既往史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 324,
|
||||
"height": 30,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "pastIllness",
|
||||
"title": "无",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 366,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "过敏史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 384,
|
||||
"height": 22.5,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "allergyHistory",
|
||||
"title": "无",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 412.5,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "家族史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 432,
|
||||
"height": 22.5,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "familyHistory",
|
||||
"title": "无",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 465,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "个人史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 486,
|
||||
"height": 28.5,
|
||||
"width": 550,
|
||||
"title": " ",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "personalHistory",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 522.2500162124634,
|
||||
"height": 13.5,
|
||||
"width": 82.5,
|
||||
"title": "体格检查",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 544.7500162124634,
|
||||
"height": 30,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"title": "长文",
|
||||
"lHeight": 20,
|
||||
"formatter": "function(title, value, options, templateData, target, paperNo) {\n // 获取所有体检数据\n const bloodHigh = templateData.bloodHigh || '';\n const bloodLow = templateData.bloodLow || '';\n const breathe = templateData.breathe || '';\n const temperature = templateData.temperature || '';\n const pulse = templateData.pulse || '';\n \n // 格式化每个字段\n \n let formattedTemperature = '';\n if (temperature && !isNaN(temperature)) {\n formattedTemperature = 'T:' + temperature + '℃';\n }\n \n let formattedPulse = '';\n if (pulse && !isNaN(pulse)) {\n formattedPulse = 'P:' + pulse + '次/分';\n }\n let formattedR = '';\n if (breathe && !isNaN(breathe)) {\n formattedR = 'R:' + breathe + '次/分';\n }\n \n let formattedBP = '';\n if (bloodHigh && !isNaN(bloodHigh)) {\n formattedBP = 'BP:' + bloodHigh +'/'+bloodLow+ 'mmHg';\n }\n \n \n // 组合所有信息\n const result = [\n formattedR,\n formattedBP,\n formattedTemperature,\n formattedPulse\n ].filter(item => item !== '').join(' ');\n \n return result;\n}\n\n"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 582,
|
||||
"height": 13.5,
|
||||
"width": 79.5,
|
||||
"title": "辅助检查",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 601.5,
|
||||
"height": 30,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "auxiliaryExam",
|
||||
"title": "长文",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 640.5,
|
||||
"height": 13.5,
|
||||
"width": 79.5,
|
||||
"title": "诊断",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 661.5,
|
||||
"height": 28.5,
|
||||
"width": 550,
|
||||
"title": "无",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "diagnosisText",
|
||||
"lHeight": 30
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 694.7431640625,
|
||||
"height": 13.5,
|
||||
"width": 79.5,
|
||||
"title": "处置",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 720,
|
||||
"height": 28.5,
|
||||
"width": 550,
|
||||
"title": "无",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "treatment",
|
||||
"lHeight": 30
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 9,
|
||||
"top": 766.5,
|
||||
"height": 9,
|
||||
"width": 576,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28.5,
|
||||
"top": 787.5,
|
||||
"height": 13.5,
|
||||
"width": 223.5,
|
||||
"title": "医生签字:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 399,
|
||||
"top": 787.5,
|
||||
"height": 13.5,
|
||||
"width": 186,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true,
|
||||
"field": "reqTime"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28.5,
|
||||
"top": 810,
|
||||
"height": 19.5,
|
||||
"width": 556.5,
|
||||
"title": "为了您和家人的健康,请勿吸烟!如需戒烟帮助,请到戒烟干预室咨询。",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true,
|
||||
"fontSize": 12,
|
||||
"letterSpacing": 1.5,
|
||||
"textAlign": "center"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
599
openhis-ui-vue3/src/components/Print/MedicinePrescription.json
Normal file
599
openhis-ui-vue3/src/components/Print/MedicinePrescription.json
Normal file
@@ -0,0 +1,599 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A5",
|
||||
"height": 210,
|
||||
"width": 148,
|
||||
"paperList": {
|
||||
"type": "A5",
|
||||
"width": 148,
|
||||
"height": 210
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 592.4409448818898,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"expandCss": "",
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.01,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "10px",
|
||||
"rotate": 0,
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"timestamp": false,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 420,
|
||||
"title": "长春市朝阳区中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 50,
|
||||
"height": 20,
|
||||
"width": 420,
|
||||
"title": "处方签",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 90,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "医保编号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 283,
|
||||
"top": 90,
|
||||
"height": 13.5,
|
||||
"width": 117,
|
||||
"title": "就诊类型",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "orgId_dictText",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 117,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "处方编号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "prescriptionNo",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 283,
|
||||
"top": 117,
|
||||
"height": 13.5,
|
||||
"width": 117,
|
||||
"title": "病人性质",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 138,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 160.5,
|
||||
"top": 153,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 153,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 154.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 27,
|
||||
"top": 177,
|
||||
"height": 13.5,
|
||||
"width": 132,
|
||||
"title": "地址:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 160.5,
|
||||
"top": 178.5,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "departmentName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 178.5,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "电话",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 205.5,
|
||||
"height": 13.5,
|
||||
"width": 189,
|
||||
"title": "门诊号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "encounterNo"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 219,
|
||||
"top": 205.5,
|
||||
"height": 13.5,
|
||||
"width": 198,
|
||||
"title": "开具日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 232.5,
|
||||
"height": 13.5,
|
||||
"width": 381,
|
||||
"title": "临床诊断",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "conditionName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 256.5,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28,
|
||||
"top": 282,
|
||||
"height": 9.75,
|
||||
"width": 120,
|
||||
"title": "Rp",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true,
|
||||
"fontSize": 18,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 15,
|
||||
"top": 306,
|
||||
"height": 36,
|
||||
"width": 390,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"textAlign": "center",
|
||||
"tableBorder": "border",
|
||||
"tableHeaderFontWeight": "500",
|
||||
"field": "prescriptionList",
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "名称",
|
||||
"width": 55.386224315781,
|
||||
"field": "itemName",
|
||||
"checked": true,
|
||||
"columnId": "itemName",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "规格",
|
||||
"width": 59.41840807183531,
|
||||
"field": "totalVolume",
|
||||
"checked": true,
|
||||
"columnId": "totalVolume",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "产地",
|
||||
"width": 79.59183673469389,
|
||||
"field": "manufacturerText",
|
||||
"checked": true,
|
||||
"columnId": "manufacturerText",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "单价",
|
||||
"width": 45.49640338326492,
|
||||
"field": "unitPrice",
|
||||
"checked": true,
|
||||
"columnId": "unitPrice",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"width": 41.658473534111906,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "金额",
|
||||
"width": 42.9159186212175,
|
||||
"field": "totalPrice",
|
||||
"checked": true,
|
||||
"columnId": "totalPrice",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "等级",
|
||||
"width": 65.53273533909551,
|
||||
"field": "contractName",
|
||||
"checked": true,
|
||||
"columnId": "contractName",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 379.5,
|
||||
"height": 13.5,
|
||||
"width": 241.5,
|
||||
"title": "用法",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 18,
|
||||
"top": 513,
|
||||
"height": 13.5,
|
||||
"width": 80,
|
||||
"title": "医师",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 124.5,
|
||||
"top": 513,
|
||||
"height": 13.5,
|
||||
"width": 80,
|
||||
"title": "发药",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 222,
|
||||
"top": 513,
|
||||
"height": 13.5,
|
||||
"width": 80,
|
||||
"title": "划价",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 310.5,
|
||||
"top": 513,
|
||||
"height": 13.5,
|
||||
"width": 80,
|
||||
"title": "调配",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 532.5,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 289,
|
||||
"top": 551.5,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "总金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "medTotalAmount"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
407
openhis-ui-vue3/src/components/Print/OperativeRecord.json
Normal file
407
openhis-ui-vue3/src/components/Print/OperativeRecord.json
Normal file
@@ -0,0 +1,407 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A4",
|
||||
"height": 297,
|
||||
"width": 210,
|
||||
"paperList": {
|
||||
"type": "A4",
|
||||
"width": 210,
|
||||
"height": 297
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 837,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"expandCss": "",
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.7,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "36px",
|
||||
"rotate": 25,
|
||||
"width": 413,
|
||||
"height": 310,
|
||||
"timestamp": true,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 595.5,
|
||||
"title": "长春市朝阳区中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 54.5,
|
||||
"height": 20,
|
||||
"width": 595.5,
|
||||
"title": "手术记录",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 247.5,
|
||||
"top": 81,
|
||||
"height": 13.5,
|
||||
"width": 190.5,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 460.5,
|
||||
"top": 81,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 82.5,
|
||||
"height": 13.5,
|
||||
"width": 193.5,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 192,
|
||||
"title": "医保",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 247.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 190.5,
|
||||
"title": "电话",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "phone"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 460.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "医生",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 460.5,
|
||||
"top": 132.99999618530273,
|
||||
"height": 13.5,
|
||||
"width": 124.5,
|
||||
"title": "科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "department"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 133.5,
|
||||
"height": 13.5,
|
||||
"width": 196.5,
|
||||
"title": "病历号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "busNo"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 247.5,
|
||||
"top": 133.5,
|
||||
"height": 13.5,
|
||||
"width": 200,
|
||||
"title": "手术日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "operationDate"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 157.5,
|
||||
"height": 61.5,
|
||||
"width": 550.5,
|
||||
"title": "诊断",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "busNosds"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 226.5,
|
||||
"height": 9,
|
||||
"width": 576,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 250.5,
|
||||
"height": 13.5,
|
||||
"width": 81,
|
||||
"title": "详细记录",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 271.5,
|
||||
"height": 493.5,
|
||||
"width": 550,
|
||||
"title": " ",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "surgicalDetails",
|
||||
"lHeight": 60,
|
||||
"formatter": "function(title, value, options, templateData, target, paperNo) {\n // 返回原始值,让组件自动处理高度\n return value;\n}",
|
||||
"styler": "function(value, options, target, templateData, paperNo) {\n return { \n 'word-wrap': 'break-word',\n 'word-break': 'break-all',\n 'white-space': 'normal',\n 'line-height': '1.4',\n 'overflow': 'visible'\n };\n}"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 9,
|
||||
"top": 774,
|
||||
"height": 9,
|
||||
"width": 576,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28.5,
|
||||
"top": 787.5,
|
||||
"height": 13.5,
|
||||
"width": 223.5,
|
||||
"title": "病人或家人签字:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 399,
|
||||
"top": 787.5,
|
||||
"height": 13.5,
|
||||
"width": 186,
|
||||
"title": "医生签字:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 399,
|
||||
"top": 811.5,
|
||||
"height": 13.5,
|
||||
"width": 186,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28.5,
|
||||
"top": 813,
|
||||
"height": 13.5,
|
||||
"width": 222,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
732
openhis-ui-vue3/src/components/Print/OutpatientBilling.json
Normal file
732
openhis-ui-vue3/src/components/Print/OutpatientBilling.json
Normal file
File diff suppressed because one or more lines are too long
239
openhis-ui-vue3/src/components/Print/OutpatientInfusion bk.json
Normal file
239
openhis-ui-vue3/src/components/Print/OutpatientInfusion bk.json
Normal file
@@ -0,0 +1,239 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 2,
|
||||
"paperType": "自定义",
|
||||
"height": 50,
|
||||
"width": 70,
|
||||
"paperList": {
|
||||
"type": "自定义",
|
||||
"width": 70,
|
||||
"height": 50
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 138.8976377952756,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.01,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "10px",
|
||||
"rotate": 0,
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"timestamp": false,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 6,
|
||||
"top": 7.5,
|
||||
"height": 15,
|
||||
"width": 51,
|
||||
"title": "文本",
|
||||
"field": "patientName",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 10.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 90,
|
||||
"top": 7.5,
|
||||
"height": 15,
|
||||
"width": 33,
|
||||
"title": "文本",
|
||||
"field": "genderEnum_enumText",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 10.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 147,
|
||||
"top": 7.5,
|
||||
"height": 15,
|
||||
"width": 45,
|
||||
"title": "文本",
|
||||
"field": "age",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 10.5,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "right"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 6,
|
||||
"top": 33,
|
||||
"height": 15,
|
||||
"width": 81,
|
||||
"title": "频次 qd",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 10.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 122,
|
||||
"top": 33,
|
||||
"height": 15,
|
||||
"width": 70.5,
|
||||
"title": "文本",
|
||||
"field": "date",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 10.5,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "right"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 4.5,
|
||||
"top": 52.5,
|
||||
"height": 36,
|
||||
"width": 189,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"field": "infuseData",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"tableHeaderBackground": "#ffffff",
|
||||
"tableBodyCellBorder": "noBorder",
|
||||
"rowsColumnsMerge": "function(data, col, colIndex, rowIndex, tableData, printData){ \n // 合并前三列 (columnIndex 0-2)\n if (colIndex >= 0 && colIndex <= 2) {\n // 第一列显示合并后的单元格\n if (colIndex === 0) {\n return [1, 3]; // rowspan=1, colspan=3\n } \n // 其他两列不显示(被合并)\n else {\n return [0, 0]; // rowspan=0, colspan=0\n }\n }\n // 其他列正常显示\n return [1, 1]; // rowspan=1, colspan=1\n}",
|
||||
"tableBodyRowBorder": "topBottomBorder",
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "用法",
|
||||
"titleSync": false,
|
||||
"halign": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 45.48982644423766,
|
||||
"field": "data",
|
||||
"checked": true,
|
||||
"columnId": "data",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "剂量",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 47.79422504530706,
|
||||
"checked": true,
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "速度",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 48.74985321589121,
|
||||
"checked": true,
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"formatter2": "function(value,row,index,options,rowIndex,column){ return value + ' ' + row.unitCode_dictText; }",
|
||||
"width": 46.96609529456407,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 151.5,
|
||||
"paperNumberTop": 91
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,245 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 2,
|
||||
"paperType": "自定义",
|
||||
"height": 34,
|
||||
"width": 58,
|
||||
"paperList": {
|
||||
"type": "自定义",
|
||||
"width": 60,
|
||||
"height": 40
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 91.5,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"expandCss": "",
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.01,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "10px",
|
||||
"rotate": 25,
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"timestamp": false,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 6,
|
||||
"top": 7.5,
|
||||
"height": 10,
|
||||
"width": 51,
|
||||
"title": "文本",
|
||||
"field": "patientName",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 70,
|
||||
"top": 7.5,
|
||||
"height": 10,
|
||||
"width": 33,
|
||||
"title": "文本",
|
||||
"field": "genderEnum_enumText",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 119,
|
||||
"top": 7.5,
|
||||
"height": 10,
|
||||
"width": 45,
|
||||
"title": "文本",
|
||||
"field": "age",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "right"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 6,
|
||||
"top": 19.5,
|
||||
"height": 12,
|
||||
"width": 81,
|
||||
"title": "频次 qd",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 8.25,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 93,
|
||||
"top": 19.5,
|
||||
"height": 10,
|
||||
"width": 70.5,
|
||||
"title": "文本",
|
||||
"field": "date",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"hideTitle": true,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold",
|
||||
"textAlign": "right"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 4.5,
|
||||
"top": 36,
|
||||
"height": 30,
|
||||
"width": 156,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"field": "infuseData",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"tableHeaderBackground": "#ffffff",
|
||||
"tableBodyCellBorder": "noBorder",
|
||||
"rowsColumnsMerge": "function(data, col, colIndex, rowIndex, tableData, printData){ \n // 合并前三列 (columnIndex 0-2)\n if (colIndex >= 0 && colIndex <= 2) {\n // 第一列显示合并后的单元格\n if (colIndex === 0) {\n return [1, 3]; // rowspan=1, colspan=3\n } \n // 其他两列不显示(被合并)\n else {\n return [0, 0]; // rowspan=0, colspan=0\n }\n }\n // 其他列正常显示\n return [1, 1]; // rowspan=1, colspan=1\n}",
|
||||
"tableBodyRowBorder": "topBottomBorder",
|
||||
"fontSize": 7.5,
|
||||
"tableHeaderRepeat": "first",
|
||||
"maxRows": 3,
|
||||
"tableHeaderRowHeight": 6,
|
||||
"tableHeaderFontSize": 6.75,
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "用法",
|
||||
"titleSync": false,
|
||||
"halign": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 37.54715833492632,
|
||||
"field": "data",
|
||||
"checked": true,
|
||||
"columnId": "data",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "剂量",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 39.4492016246979,
|
||||
"checked": true,
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "速度",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 40.23797408295783,
|
||||
"checked": true,
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"formatter2": "function(value,row,index,options,rowIndex,column){ return value + ' ' + row.unitCode_dictText; }",
|
||||
"width": 38.765665957417966,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 151.5,
|
||||
"paperNumberTop": 91
|
||||
}
|
||||
]
|
||||
}
|
||||
290
openhis-ui-vue3/src/components/Print/OutpatientInfusion.json
Normal file
290
openhis-ui-vue3/src/components/Print/OutpatientInfusion.json
Normal file
@@ -0,0 +1,290 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 2,
|
||||
"paperType": "自定义",
|
||||
"height": 60,
|
||||
"width": 80,
|
||||
"paperList": {
|
||||
"type": "自定义",
|
||||
"width": 80,
|
||||
"height": 60
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 166.5,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.7,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "36px",
|
||||
"rotate": 25,
|
||||
"width": 413,
|
||||
"height": 310,
|
||||
"timestamp": true,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 6,
|
||||
"top": 7.5,
|
||||
"height": 10,
|
||||
"width": 69,
|
||||
"title": "病区",
|
||||
"field": "patientName",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 81,
|
||||
"top": 7.5,
|
||||
"height": 10,
|
||||
"width": 52.5,
|
||||
"title": "姓名",
|
||||
"field": "patientName",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 147,
|
||||
"top": 7.5,
|
||||
"height": 10,
|
||||
"width": 72,
|
||||
"title": "床位号",
|
||||
"field": "bedNo",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 6,
|
||||
"top": 22,
|
||||
"height": 12,
|
||||
"width": 81,
|
||||
"title": "频次 qd",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 8.25,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 147,
|
||||
"top": 24,
|
||||
"height": 10,
|
||||
"width": 70.5,
|
||||
"title": "日期",
|
||||
"field": "date",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0,
|
||||
"fontSize": 7.5,
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 4.5,
|
||||
"top": 45,
|
||||
"height": 30,
|
||||
"width": 216,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"field": "infuseData",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"tableHeaderBackground": "#ffffff",
|
||||
"tableBodyCellBorder": "noBorder",
|
||||
"rowsColumnsMerge": "function(data, col, colIndex, rowIndex, tableData, printData){ \n // 合并前三列 (columnIndex 0-2)\n if (colIndex >= 0 && colIndex <= 2) {\n // 第一列显示合并后的单元格\n if (colIndex === 0) {\n return [1, 3]; // rowspan=1, colspan=3\n } \n // 其他两列不显示(被合并)\n else {\n return [0, 0]; // rowspan=0, colspan=0\n }\n }\n // 其他列正常显示\n return [1, 1]; // rowspan=1, colspan=1\n}",
|
||||
"tableBodyRowBorder": "topBottomBorder",
|
||||
"fontSize": 7.5,
|
||||
"tableHeaderRepeat": "first",
|
||||
"maxRows": 3,
|
||||
"tableHeaderRowHeight": 6,
|
||||
"tableHeaderFontSize": 6.75,
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "用法",
|
||||
"titleSync": false,
|
||||
"halign": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 51.988373079128756,
|
||||
"field": "data",
|
||||
"checked": true,
|
||||
"columnId": "data",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "剂量",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 55.016471480350916,
|
||||
"checked": true,
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "滴速",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"width": 55.31961796101854,
|
||||
"field": "",
|
||||
"checked": true,
|
||||
"columnId": "",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"titleSync": false,
|
||||
"align": "center",
|
||||
"tableQRCodeLevel": 0,
|
||||
"tableSummaryTitle": true,
|
||||
"tableSummary": "",
|
||||
"formatter2": "function(value,row,index,options,rowIndex,column){ return value + ' ' + row.unitCode_dictText; }",
|
||||
"width": 53.6755374795018,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 144,
|
||||
"height": 9,
|
||||
"width": 210,
|
||||
"borderWidth": "0.75",
|
||||
"title": "undefined+beforeDragIn",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 153,
|
||||
"height": 9.75,
|
||||
"width": 82.5,
|
||||
"title": "执行人",
|
||||
"field": "prepareName",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 111,
|
||||
"top": 153,
|
||||
"height": 9.75,
|
||||
"width": 82.5,
|
||||
"title": "时间",
|
||||
"field": "date",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 151.5,
|
||||
"paperNumberTop": 91
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,734 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A4",
|
||||
"height": 297,
|
||||
"width": 210,
|
||||
"paperList": {
|
||||
"type": "A4",
|
||||
"width": 210,
|
||||
"height": 297
|
||||
},
|
||||
"paperHeader": 217.5,
|
||||
"paperFooter": 771,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.7,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "36px",
|
||||
"rotate": 25,
|
||||
"width": 413,
|
||||
"height": 310,
|
||||
"timestamp": true,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 595.5,
|
||||
"title": "长春市朝阳区中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 54.5,
|
||||
"height": 20,
|
||||
"width": 595.5,
|
||||
"title": "门诊病历",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 247.5,
|
||||
"top": 81,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 460.5,
|
||||
"top": 81,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 82.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "医保",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 247.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 190.5,
|
||||
"title": "电话",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "phone"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 460.5,
|
||||
"top": 108,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "医生",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 133.5,
|
||||
"height": 13.5,
|
||||
"width": 196.5,
|
||||
"title": "病历号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "busNo"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 247.5,
|
||||
"top": 133.5,
|
||||
"height": 13.5,
|
||||
"width": 200,
|
||||
"title": "发病日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "onsetDate"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 159,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "诊断",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "vxc"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 174,
|
||||
"height": 30,
|
||||
"width": 550,
|
||||
"hideTitle": true,
|
||||
"field": "diagnosisText",
|
||||
"title": "无",
|
||||
"lHeight": 20,
|
||||
"formatter": "function(title, value, options, templateData, target, paperNo) {\n return value || '无';\n}",
|
||||
"styler": "function(value, options, target, templateData, paperNo) {\n return { \n 'word-wrap': 'break-word',\n 'word-break': 'break-all',\n 'white-space': 'normal',\n 'line-height': '1.4'\n };\n}",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 210,
|
||||
"height": 9,
|
||||
"width": 576,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 217.5,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "主诉",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 235.5,
|
||||
"height": 33,
|
||||
"width": 550,
|
||||
"title": " ",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "complaint",
|
||||
"lHeight": 50
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 277.5,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "现病史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 299.5,
|
||||
"height": 31.5,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "presentIllness",
|
||||
"title": "无",
|
||||
"lHeight": 30
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 341,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "既往史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 360,
|
||||
"height": 25.5,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "pastIllness",
|
||||
"title": "无",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 396,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "过敏史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 414,
|
||||
"height": 33,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "allergyHistory",
|
||||
"title": "无",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 462,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "家族史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 481.5,
|
||||
"height": 22.5,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "familyHistory",
|
||||
"title": "无",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 514.5,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "个人史",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 535.5,
|
||||
"height": 28.5,
|
||||
"width": 550,
|
||||
"title": " ",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "personalHistory",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 571.7500162124634,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "体检",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 594.2500162124634,
|
||||
"height": 30,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"title": "长文",
|
||||
"lHeight": 20,
|
||||
"formatter": "function(title, value, options, templateData, target, paperNo) {\n // 获取所有体检数据\n const height = templateData.height || '';\n const weight = templateData.weight || '';\n const temperature = templateData.temperature || '';\n const pulse = templateData.pulse || '';\n \n // 格式化每个字段\n let formattedHeight = '';\n if (height && !isNaN(height)) {\n formattedHeight = '身高:' + height + 'cm';\n }\n \n let formattedWeight = '';\n if (weight && !isNaN(weight)) {\n formattedWeight = '体重:' + weight + 'kg';\n }\n \n let formattedTemperature = '';\n if (temperature && !isNaN(temperature)) {\n formattedTemperature = '体温:' + temperature + '℃';\n }\n \n let formattedPulse = '';\n if (pulse && !isNaN(pulse)) {\n formattedPulse = '脉搏:' + pulse + '次/分';\n }\n \n // 组合所有信息\n const result = [\n formattedHeight,\n formattedWeight,\n formattedTemperature,\n formattedPulse\n ].filter(item => item !== '').join(' ');\n \n return result;\n}\n\n"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 631.5,
|
||||
"height": 13.5,
|
||||
"width": 79.5,
|
||||
"title": "辅助检查",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 651,
|
||||
"height": 22.5,
|
||||
"width": 550,
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "auxiliaryExam",
|
||||
"title": "长文",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 678.2431640625,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "处置",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 700.5,
|
||||
"height": 21,
|
||||
"width": 550,
|
||||
"title": "无",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "treatment",
|
||||
"lHeight": 30
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 730,
|
||||
"height": 13.5,
|
||||
"width": 50,
|
||||
"title": "治疗",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "physicalExamdsd",
|
||||
"fontWeight": "bold"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 747,
|
||||
"height": 25.5,
|
||||
"width": 550,
|
||||
"title": "无",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"hideTitle": true,
|
||||
"field": "physicalExam",
|
||||
"lHeight": 20
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "长文",
|
||||
"type": "longText"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 9,
|
||||
"top": 774,
|
||||
"height": 9,
|
||||
"width": 576,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28.5,
|
||||
"top": 787.5,
|
||||
"height": 13.5,
|
||||
"width": 223.5,
|
||||
"title": "病人或家人签字:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 399,
|
||||
"top": 787.5,
|
||||
"height": 13.5,
|
||||
"width": 186,
|
||||
"title": "医生签字:",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 399,
|
||||
"top": 811.5,
|
||||
"height": 13.5,
|
||||
"width": 186,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28.5,
|
||||
"top": 813,
|
||||
"height": 13.5,
|
||||
"width": 222,
|
||||
"title": "日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
716
openhis-ui-vue3/src/components/Print/OutpatientRegistration.json
Normal file
716
openhis-ui-vue3/src/components/Print/OutpatientRegistration.json
Normal file
File diff suppressed because one or more lines are too long
1174
openhis-ui-vue3/src/components/Print/Pharmacy copy 2.json
Normal file
1174
openhis-ui-vue3/src/components/Print/Pharmacy copy 2.json
Normal file
File diff suppressed because it is too large
Load Diff
1176
openhis-ui-vue3/src/components/Print/Pharmacy copy.json
Normal file
1176
openhis-ui-vue3/src/components/Print/Pharmacy copy.json
Normal file
File diff suppressed because it is too large
Load Diff
1175
openhis-ui-vue3/src/components/Print/Pharmacy.json
Normal file
1175
openhis-ui-vue3/src/components/Print/Pharmacy.json
Normal file
File diff suppressed because it is too large
Load Diff
632
openhis-ui-vue3/src/components/Print/Prescription.json
Normal file
632
openhis-ui-vue3/src/components/Print/Prescription.json
Normal file
@@ -0,0 +1,632 @@
|
||||
{
|
||||
"panels": [
|
||||
{
|
||||
"index": 1,
|
||||
"name": 3,
|
||||
"paperType": "A5",
|
||||
"height": 210,
|
||||
"width": 148,
|
||||
"paperList": {
|
||||
"type": "A5",
|
||||
"width": 148,
|
||||
"height": 210
|
||||
},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 592.4409448818898,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"panelAngle": 0,
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.01,
|
||||
"type": 1
|
||||
},
|
||||
"watermarkOptions": {
|
||||
"content": "",
|
||||
"fillStyle": "rgba(87, 13, 248, 0.5)",
|
||||
"fontSize": "10px",
|
||||
"rotate": 0,
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"timestamp": false,
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {
|
||||
"layoutType": "column",
|
||||
"layoutRowGap": 0,
|
||||
"layoutColumnGap": 0
|
||||
},
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 19.5,
|
||||
"width": 420,
|
||||
"title": "长春市朝阳区中医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 20.25,
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 0,
|
||||
"top": 50,
|
||||
"height": 20,
|
||||
"width": 420,
|
||||
"title": "处方签",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"textAlign": "center",
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 90,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "医保编号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 283,
|
||||
"top": 90,
|
||||
"height": 13.5,
|
||||
"width": 117,
|
||||
"title": "就诊类型",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "orgId_dictText",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 117,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "处方编号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "prescriptionNo",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 283,
|
||||
"top": 117,
|
||||
"height": 13.5,
|
||||
"width": 117,
|
||||
"title": "病人性质",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "contractName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 138,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 142.5,
|
||||
"top": 153,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "性别",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "genderEnum_enumText",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 153,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "年龄",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "age",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 154.5,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "姓名",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "patientName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 142.5,
|
||||
"top": 178.5,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "科室",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "departmentName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 288,
|
||||
"top": 178.5,
|
||||
"height": 13.5,
|
||||
"width": 99,
|
||||
"title": "电话",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 180,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "门诊号",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "encounterNo",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 205.5,
|
||||
"height": 13.5,
|
||||
"width": 141,
|
||||
"title": "地址",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 195,
|
||||
"top": 205.5,
|
||||
"height": 13.5,
|
||||
"width": 210,
|
||||
"title": "开具日期",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "reqTime",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 232.5,
|
||||
"height": 13.5,
|
||||
"width": 367.5,
|
||||
"title": "临床诊断",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "conditionName"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 256.5,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 28,
|
||||
"top": 282,
|
||||
"height": 9.75,
|
||||
"width": 120,
|
||||
"title": "Rp",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true,
|
||||
"fontSize": 18,
|
||||
"qrCodeLevel": 0
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 15,
|
||||
"top": 306,
|
||||
"height": 36,
|
||||
"width": 390,
|
||||
"title": "undefined+beforeDragIn",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"textAlign": "center",
|
||||
"tableBorder": "border",
|
||||
"tableHeaderFontWeight": "500",
|
||||
"field": "prescriptionList",
|
||||
"columns": [
|
||||
[
|
||||
{
|
||||
"title": "名称",
|
||||
"width": 55.386224315781,
|
||||
"field": "itemName",
|
||||
"checked": true,
|
||||
"columnId": "itemName",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "规格",
|
||||
"width": 59.41840807183531,
|
||||
"field": "totalVolume",
|
||||
"checked": true,
|
||||
"columnId": "totalVolume",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "厂家",
|
||||
"width": 79.59183673469389,
|
||||
"checked": true,
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "单价",
|
||||
"width": 45.49640338326492,
|
||||
"field": "unitPrice",
|
||||
"checked": true,
|
||||
"columnId": "unitPrice",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "数量",
|
||||
"width": 41.658473534111906,
|
||||
"field": "quantity",
|
||||
"checked": true,
|
||||
"columnId": "quantity",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "金额",
|
||||
"width": 42.9159186212175,
|
||||
"field": "totalPrice",
|
||||
"checked": true,
|
||||
"columnId": "totalPrice",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
},
|
||||
{
|
||||
"title": "等级",
|
||||
"width": 65.53273533909551,
|
||||
"field": "contractName",
|
||||
"checked": true,
|
||||
"columnId": "contractName",
|
||||
"fixed": false,
|
||||
"rowspan": 1,
|
||||
"colspan": 1
|
||||
}
|
||||
]
|
||||
]
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "表格",
|
||||
"type": "table",
|
||||
"editable": true,
|
||||
"columnDisplayEditable": true,
|
||||
"columnDisplayIndexEditable": true,
|
||||
"columnTitleEditable": true,
|
||||
"columnResizable": true,
|
||||
"columnAlignEditable": true,
|
||||
"isEnableEditField": true,
|
||||
"isEnableContextMenu": true,
|
||||
"isEnableInsertRow": true,
|
||||
"isEnableDeleteRow": true,
|
||||
"isEnableInsertColumn": true,
|
||||
"isEnableDeleteColumn": true,
|
||||
"isEnableMergeCell": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 25.5,
|
||||
"top": 379.5,
|
||||
"height": 13.5,
|
||||
"width": 241.5,
|
||||
"title": "用法",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 8.996109008789062,
|
||||
"top": 510,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "医师",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "doctorName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 113,
|
||||
"top": 510,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "发药",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 217,
|
||||
"top": 510,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "划价",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 318,
|
||||
"top": 510,
|
||||
"height": 13.5,
|
||||
"width": 100,
|
||||
"title": "调配",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "nickName",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 10,
|
||||
"top": 532.5,
|
||||
"height": 9,
|
||||
"width": 400,
|
||||
"borderWidth": "1.5",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "横线",
|
||||
"type": "hline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 26,
|
||||
"top": 551.5,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "制表人",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "1",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 289,
|
||||
"top": 551.5,
|
||||
"height": 13.5,
|
||||
"width": 120,
|
||||
"title": "金额",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 12,
|
||||
"qrCodeLevel": 0,
|
||||
"field": "medTotalAmount",
|
||||
"fixed": true
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
"type": "text"
|
||||
}
|
||||
}
|
||||
],
|
||||
"paperNumberLeft": 236,
|
||||
"paperNumberTop": 573
|
||||
}
|
||||
]
|
||||
}
|
||||
14
openhis-ui-vue3/src/components/Print/README.md
Normal file
14
openhis-ui-vue3/src/components/Print/README.md
Normal file
@@ -0,0 +1,14 @@
|
||||
处方签 Prescription.json
|
||||
处置单 Disposal.json
|
||||
门诊日结 DailyOutpatientSettlement.json
|
||||
门诊挂号 OutpatientRegistration.json
|
||||
门诊收费 OutpatientBilling.json
|
||||
门诊病历 OutpatientMedicalRecord.json
|
||||
手术记录 OperativeRecord.json
|
||||
|
||||
门诊输液贴 OutpatientInfusion.json
|
||||
药房打印 Pharmacy.json
|
||||
红旗门诊病历 HQOutpatientMedicalRecord.json
|
||||
预交金 AdvancePayment.json
|
||||
中药药房处方单 ChineseMedicinePrescription.json
|
||||
中药医生处方单 DocChineseMedicinePrescription.json
|
||||
90
openhis-ui-vue3/src/directive/common/arrowNavigate.js
Normal file
90
openhis-ui-vue3/src/directive/common/arrowNavigate.js
Normal file
@@ -0,0 +1,90 @@
|
||||
const KEY_DELTA_MAP = {
|
||||
ArrowLeft: -1,
|
||||
ArrowUp: -1,
|
||||
ArrowRight: 1,
|
||||
ArrowDown: 1,
|
||||
}
|
||||
|
||||
const FOCUSABLE_SELECTORS = [
|
||||
'input:not([type="hidden"]):not([disabled])',
|
||||
'textarea:not([disabled])',
|
||||
'select:not([disabled])',
|
||||
'.el-input__inner',
|
||||
'.el-input-number',
|
||||
'.el-select',
|
||||
'.el-tree-select',
|
||||
'[tabindex]:not([tabindex="-1"])',
|
||||
]
|
||||
|
||||
function focusControl(container) {
|
||||
if (!container) return
|
||||
|
||||
const focus = (el) => {
|
||||
if (!el) return
|
||||
el.focus?.()
|
||||
if (el.select && !el.readOnly) {
|
||||
el.select()
|
||||
}
|
||||
}
|
||||
|
||||
if (container.matches?.('input, textarea, select')) {
|
||||
focus(container)
|
||||
return
|
||||
}
|
||||
|
||||
const directTarget = container.querySelector(FOCUSABLE_SELECTORS.join(', '))
|
||||
if (directTarget) {
|
||||
focusControl(directTarget)
|
||||
return
|
||||
}
|
||||
|
||||
focus(container)
|
||||
}
|
||||
|
||||
function getFormItems(root) {
|
||||
const propItems = Array.from(root.querySelectorAll('[data-prop]'))
|
||||
if (propItems.length) {
|
||||
return propItems
|
||||
}
|
||||
return Array.from(root.querySelectorAll('.el-form-item'))
|
||||
}
|
||||
|
||||
function createHandler(root) {
|
||||
return function handleKeyDown(event) {
|
||||
const delta = KEY_DELTA_MAP[event.key]
|
||||
if (!delta) return
|
||||
|
||||
const currentItem = event.target.closest('[data-prop], .el-form-item')
|
||||
if (!currentItem || !root.contains(currentItem)) return
|
||||
|
||||
const items = getFormItems(root)
|
||||
if (!items.length) return
|
||||
|
||||
const currentIndex = items.indexOf(currentItem)
|
||||
if (currentIndex === -1) return
|
||||
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
|
||||
const nextIndex = (currentIndex + delta + items.length) % items.length
|
||||
const targetItem = items[nextIndex]
|
||||
if (targetItem) {
|
||||
focusControl(targetItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
mounted(el) {
|
||||
const handler = createHandler(el)
|
||||
el.__arrowNavigateHandler = handler
|
||||
el.addEventListener('keydown', handler, true)
|
||||
},
|
||||
beforeUnmount(el) {
|
||||
if (el.__arrowNavigateHandler) {
|
||||
el.removeEventListener('keydown', el.__arrowNavigateHandler, true)
|
||||
delete el.__arrowNavigateHandler
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import hasPermi from './permission/hasPermi'
|
||||
import copyText from './common/copyText'
|
||||
import horizontalScroll from './common/horizontalScroll'
|
||||
import clickOutsideRow from './common/clickOutsideRow'
|
||||
import arrowNavigate from './common/arrowNavigate'
|
||||
|
||||
export default function directive(app){
|
||||
app.directive('hasRole', hasRole)
|
||||
@@ -10,4 +11,5 @@ export default function directive(app){
|
||||
app.directive('copyText', copyText)
|
||||
app.directive('horizontal-scroll', horizontalScroll)
|
||||
app.directive('click-outside-row', clickOutsideRow)
|
||||
app.directive('arrow-navigate', arrowNavigate)
|
||||
}
|
||||
@@ -1,98 +1,109 @@
|
||||
import { createApp } from 'vue'
|
||||
import { createApp } from 'vue';
|
||||
|
||||
import Cookies from 'js-cookie'
|
||||
import Cookies from 'js-cookie';
|
||||
|
||||
import ElementPlus from 'element-plus'
|
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
||||
import 'element-plus/dist/index.css'
|
||||
import locale from 'element-plus/es/locale/lang/zh-cn'
|
||||
// 导入 hiprint 并挂载到全局 window 对象
|
||||
import { hiprint } from 'vue-plugin-hiprint';
|
||||
window.hiprint = hiprint;
|
||||
|
||||
import '@/assets/styles/index.scss' // global css
|
||||
import ElementPlus from 'element-plus';
|
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn';
|
||||
import 'element-plus/dist/index.css';
|
||||
import locale from 'element-plus/es/locale/lang/zh-cn';
|
||||
|
||||
import App from './App'
|
||||
import store from './store'
|
||||
import router from './router'
|
||||
import directive from './directive' // directive
|
||||
import '@/assets/styles/index.scss'; // global css
|
||||
|
||||
import App from './App';
|
||||
import store from './store';
|
||||
import router from './router';
|
||||
import directive from './directive'; // directive
|
||||
|
||||
// 注册指令
|
||||
import plugins from './plugins' // plugins
|
||||
import { download, downloadGet } from '@/utils/request'
|
||||
import plugins from './plugins'; // plugins
|
||||
import { download, downloadGet } from '@/utils/request';
|
||||
|
||||
// svg图标
|
||||
import 'virtual:svg-icons-register'
|
||||
import SvgIcon from '@/components/SvgIcon'
|
||||
import elementIcons from '@/components/SvgIcon/svgicon'
|
||||
import 'virtual:svg-icons-register';
|
||||
import SvgIcon from '@/components/SvgIcon';
|
||||
import elementIcons from '@/components/SvgIcon/svgicon';
|
||||
|
||||
import './permission' // permission control
|
||||
import './permission'; // permission control
|
||||
|
||||
import { useDict } from '@/utils/dict'
|
||||
import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels} from '@/utils/openhis'
|
||||
import { useDict } from '@/utils/dict';
|
||||
import {
|
||||
parseTime,
|
||||
resetForm,
|
||||
addDateRange,
|
||||
handleTree,
|
||||
selectDictLabel,
|
||||
selectDictLabels,
|
||||
} from '@/utils/openhis';
|
||||
|
||||
import { formatDateStr } from '@/utils/index';
|
||||
|
||||
// 分页组件
|
||||
import Pagination from '@/components/Pagination'
|
||||
import Pagination from '@/components/Pagination';
|
||||
// 自定义表格工具组件
|
||||
import RightToolbar from '@/components/RightToolbar'
|
||||
import RightToolbar from '@/components/RightToolbar';
|
||||
// 富文本组件
|
||||
import Editor from "@/components/Editor"
|
||||
import Editor from '@/components/Editor';
|
||||
// 文件上传组件
|
||||
import FileUpload from "@/components/FileUpload"
|
||||
import FileUpload from '@/components/FileUpload';
|
||||
// 图片上传组件
|
||||
import ImageUpload from "@/components/ImageUpload"
|
||||
import ImageUpload from '@/components/ImageUpload';
|
||||
// 图片预览组件
|
||||
import ImagePreview from "@/components/ImagePreview"
|
||||
import ImagePreview from '@/components/ImagePreview';
|
||||
// 自定义树选择组件
|
||||
import TreeSelect from '@/components/TreeSelect'
|
||||
import TreeSelect from '@/components/TreeSelect';
|
||||
// 字典标签组件
|
||||
import DictTag from '@/components/DictTag'
|
||||
import DictTag from '@/components/DictTag';
|
||||
|
||||
import { ElDialog, ElMessage } from 'element-plus';
|
||||
|
||||
import {registerComponents} from './template';
|
||||
import { registerComponents } from './template';
|
||||
const app = createApp(App);
|
||||
|
||||
if(chrome.webview !== undefined) {
|
||||
if (chrome.webview !== undefined) {
|
||||
// 如果是webview环境,挂载CSharpAccessor对象到vue实例上
|
||||
const csAccessor = chrome.webview.hostObjects.CSharpAccessor;
|
||||
app.config.globalProperties.csAccessor = csAccessor;
|
||||
}
|
||||
|
||||
// 全局方法挂载
|
||||
app.config.globalProperties.useDict = useDict
|
||||
app.config.globalProperties.download = download
|
||||
app.config.globalProperties.downloadGet = downloadGet
|
||||
app.config.globalProperties.parseTime = parseTime
|
||||
app.config.globalProperties.resetForm = resetForm
|
||||
app.config.globalProperties.handleTree = handleTree
|
||||
app.config.globalProperties.addDateRange = addDateRange
|
||||
app.config.globalProperties.selectDictLabel = selectDictLabel
|
||||
app.config.globalProperties.selectDictLabels = selectDictLabels
|
||||
app.config.globalProperties.formatDateStr = formatDateStr
|
||||
app.config.globalProperties.useDict = useDict;
|
||||
app.config.globalProperties.download = download;
|
||||
app.config.globalProperties.downloadGet = downloadGet;
|
||||
app.config.globalProperties.parseTime = parseTime;
|
||||
app.config.globalProperties.resetForm = resetForm;
|
||||
app.config.globalProperties.handleTree = handleTree;
|
||||
app.config.globalProperties.addDateRange = addDateRange;
|
||||
app.config.globalProperties.selectDictLabel = selectDictLabel;
|
||||
app.config.globalProperties.selectDictLabels = selectDictLabels;
|
||||
app.config.globalProperties.formatDateStr = formatDateStr;
|
||||
// 全局组件挂载
|
||||
app.component('DictTag', DictTag)
|
||||
app.component('Pagination', Pagination)
|
||||
app.component('TreeSelect', TreeSelect)
|
||||
app.component('FileUpload', FileUpload)
|
||||
app.component('ImageUpload', ImageUpload)
|
||||
app.component('ImagePreview', ImagePreview)
|
||||
app.component('RightToolbar', RightToolbar)
|
||||
app.component('Editor', Editor)
|
||||
app.use(registerComponents)
|
||||
app.use(ElMessage)
|
||||
app.use(router)
|
||||
app.use(store)
|
||||
app.use(plugins)
|
||||
app.use(elementIcons)
|
||||
app.component('svg-icon', SvgIcon)
|
||||
directive(app)
|
||||
app.component('DictTag', DictTag);
|
||||
app.component('Pagination', Pagination);
|
||||
app.component('TreeSelect', TreeSelect);
|
||||
app.component('FileUpload', FileUpload);
|
||||
app.component('ImageUpload', ImageUpload);
|
||||
app.component('ImagePreview', ImagePreview);
|
||||
app.component('RightToolbar', RightToolbar);
|
||||
app.component('Editor', Editor);
|
||||
app.use(registerComponents);
|
||||
app.use(ElMessage);
|
||||
app.use(router);
|
||||
app.use(store);
|
||||
app.use(plugins);
|
||||
app.use(elementIcons);
|
||||
app.component('svg-icon', SvgIcon);
|
||||
directive(app);
|
||||
// 全局禁止点击遮罩层关闭弹窗
|
||||
ElDialog.props.closeOnClickModal.default = false;
|
||||
// 使用element-plus 并且设置全局的大小
|
||||
app.use(ElementPlus, {
|
||||
locale: zhCn,
|
||||
// 支持 large、default、small
|
||||
size: Cookies.get('size') || 'default'
|
||||
})
|
||||
size: Cookies.get('size') || 'default',
|
||||
});
|
||||
|
||||
app.mount('#app')
|
||||
app.mount('#app');
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { createWebHistory, createRouter } from 'vue-router';
|
||||
/* Layout */
|
||||
import Layout from '@/layout';
|
||||
import { path } from 'd3';
|
||||
|
||||
/**
|
||||
* Note: 路由配置项
|
||||
@@ -85,6 +86,10 @@ export const constantRoutes = [
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: '/tpr',
|
||||
component: () => import('@/views/inpatientNurse/tprSheet/index.vue'),
|
||||
},
|
||||
];
|
||||
|
||||
// 动态路由,基于用户权限动态去加载
|
||||
|
||||
422
openhis-ui-vue3/src/template/DischargeDiagnosisCertificate.vue
Normal file
422
openhis-ui-vue3/src/template/DischargeDiagnosisCertificate.vue
Normal file
@@ -0,0 +1,422 @@
|
||||
<template>
|
||||
<div class="medical-form">
|
||||
<div class="patient-name">
|
||||
患者姓名:{{ patient?.patientName || '未知' }} 病历号:{{
|
||||
patient?.busNo || '未知'
|
||||
}}
|
||||
</div>
|
||||
<h2 style="text-align: center">长春市朝阳区中医院</h2>
|
||||
<h2 style="text-align: center">出院诊断病历</h2>
|
||||
|
||||
<!-- 滚动内容区域 -->
|
||||
<div class="form-scroll-container">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
label-align="left"
|
||||
class="medical-full-form"
|
||||
>
|
||||
<h4 class="section-title">一、基础信息</h4>
|
||||
<!-- 1. 基础信息:单行自适应排列 -->
|
||||
<el-form-item class="form-section">
|
||||
<div class="single-row-layout">
|
||||
<el-form-item label="姓名" prop="patientName" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.patientName" type="text" placeholder="请输入" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.age" type="text" placeholder="请输入" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.gender" type="text" placeholder="请输入" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="住院号" prop="busNo" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.busNo" type="text" placeholder="请输入" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="职业" prop="temperature" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="入院日期" prop="admissionDate" class="row-item">
|
||||
<el-date-picker
|
||||
v-model="formData.admissionDate"
|
||||
type="date"
|
||||
placeholder="选择入院日期"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="出院日期" prop="dischargeDate" class="row-item">
|
||||
<el-date-picker
|
||||
v-model="formData.dischargeDate"
|
||||
type="date"
|
||||
placeholder="选择出院日期"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="住院天数" prop="hospitalDays" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.hospitalDays" type="number" placeholder="请输入" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<h4 class="section-title">二、诊断</h4>
|
||||
<!-- 3. 出院诊断(必填) -->
|
||||
<el-form-item label="出院诊断" prop="DischargeDiagnosis" class="required form-item-single">
|
||||
<el-input
|
||||
v-model="formData.DischargeDiagnosis"
|
||||
type="textarea"
|
||||
placeholder="请输入出院诊断"
|
||||
:rows="4"
|
||||
style="resize: none; padding-right: 10px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 4. 出院病情摘要及诊疗经过 -->
|
||||
<el-form-item
|
||||
label="出院病情摘要及诊疗经过"
|
||||
prop="SummaryAndDiagnosisAndTreatmentProcess"
|
||||
class="form-item-single"
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.SummaryAndDiagnosisAndTreatmentProcess"
|
||||
type="textarea"
|
||||
placeholder="请输入出院病情摘要及诊疗经过"
|
||||
:rows="4"
|
||||
style="resize: none; padding-right: 10px"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="出院后要求及注意事项"
|
||||
prop="RequirementsAndPrecautionsAfterDischarge"
|
||||
class="form-item-single"
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.RequirementsAndPrecautionsAfterDischarge"
|
||||
type="textarea"
|
||||
placeholder="请输入出院后要求及注意事项"
|
||||
:rows="4"
|
||||
style="resize: none; padding-right: 10px"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item
|
||||
label="中医调护"
|
||||
prop="TraditionalChineseMedicineNursing"
|
||||
class="form-item-single"
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.TraditionalChineseMedicineNursing"
|
||||
type="textarea"
|
||||
placeholder="请输入中医调护"
|
||||
:rows="4"
|
||||
style="resize: none; padding-right: 10px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, onMounted, watch } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { patientInfo } from '../views/doctorstation/components/store/patient';
|
||||
|
||||
defineOptions({
|
||||
name: 'DischargeDiagnosisCertificate',
|
||||
});
|
||||
|
||||
// Props与事件
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const patient = props.patientInfo;
|
||||
|
||||
// const props = defineProps({});
|
||||
const emits = defineEmits(['submitOk']);
|
||||
|
||||
// 数据初始化
|
||||
// const patient = ref(null);
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
patientName: '', // 姓名
|
||||
age: '', // 年龄
|
||||
gender: '', // 性别
|
||||
busNo: '', // 住院号
|
||||
admissionDate: '', // 入院日期
|
||||
dischargeDate: '', // 出院日期
|
||||
hospitalDays: '', // 住院天数
|
||||
DischargeDiagnosis: '', // 出院诊断
|
||||
SummaryAndDiagnosisAndTreatmentProcess: '', // 出院病情摘要及诊疗经过
|
||||
RequirementsAndPrecautionsAfterDischarge: '', // 出院后要求及注意事项
|
||||
TraditionalChineseMedicineNursing: '', // 中医调护
|
||||
});
|
||||
|
||||
// 表单校验规则
|
||||
const rules = reactive({
|
||||
dischargeDiagnosis: [
|
||||
{
|
||||
required: true,
|
||||
message: '请填写出院诊断',
|
||||
trigger: ['blur', 'submit'],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// 提交函数
|
||||
const submit = () => {
|
||||
emits('submitOk', formData);
|
||||
};
|
||||
// 表单数据赋值
|
||||
const setFormData = (data) => {
|
||||
if (data) {
|
||||
Object.assign(formData, data);
|
||||
}
|
||||
};
|
||||
|
||||
// 生命周期
|
||||
onMounted(() => {
|
||||
// patient.value = patientInfo.value;
|
||||
// 组件挂载时自动填充患者信息
|
||||
// fillPatientInfo(patientInfo.value);
|
||||
if (!formData.patientName) {
|
||||
formData.patientName = patient?.patientName || '';
|
||||
}
|
||||
if (!formData.gender) {
|
||||
formData.gender = patient?.genderEnum_enumText || '';
|
||||
}
|
||||
if (!formData.age) {
|
||||
formData.age = patient?.age || '';
|
||||
}
|
||||
if (!formData.department) {
|
||||
formData.department = patient?.inHospitalOrgName || '';
|
||||
}
|
||||
if (!formData.bedNo) {
|
||||
formData.bedNo = patient?.houseName + '-' + patient?.bedName;
|
||||
}
|
||||
if (!formData.busNo) {
|
||||
formData.busNo = patient?.busNo || '';
|
||||
}
|
||||
if (!formData.admissionDate) {
|
||||
formData.admissionDate = patient?.inHospitalTime || '';
|
||||
}
|
||||
});
|
||||
|
||||
// 监听患者信息变化,实现联动显示和自动填充
|
||||
// watch(
|
||||
// () => patientInfo.value,
|
||||
// (newPatientInfo) => {
|
||||
// patient.value = newPatientInfo;
|
||||
// // 患者信息变化时自动填充
|
||||
// fillPatientInfo(newPatientInfo);
|
||||
// },
|
||||
// { deep: true }
|
||||
// );
|
||||
|
||||
// 自动填充患者信息到表单
|
||||
const fillPatientInfo = (patientData) => {
|
||||
if (!patientData) {
|
||||
ElMessage.warning('未获取到患者信息,请确保已选择患者');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 填充基本信息,处理可能的数据缺失情况
|
||||
formData.patientName = patientData.patientName || '';
|
||||
formData.age = patientData.age || '';
|
||||
formData.gender = patientData.genderEnum_enumText || '';
|
||||
formData.busNo = patientData.busNo || '';
|
||||
} catch (error) {
|
||||
console.error('填充患者信息时发生错误:', error);
|
||||
ElMessage.error('自动填充患者信息失败,请检查数据源格式');
|
||||
}
|
||||
};
|
||||
|
||||
// 暴露接口
|
||||
defineExpose({ formData, submit, setFormData, fillPatientInfo });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 表单外层容器 */
|
||||
.medical-form {
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
min-height: 800px;
|
||||
height: auto;
|
||||
margin: 15px auto;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
font-family: Arial, sans-serif;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden; /* 防止内部内容溢出 */
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 顶部姓名样式 */
|
||||
.patient-name {
|
||||
display: inline-block;
|
||||
margin-bottom: 15px;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 滚动内容容器 */
|
||||
.form-scroll-container {
|
||||
width: 100%;
|
||||
max-height: 55vh;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #ccc #f5f5f5;
|
||||
position: relative;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar-thumb {
|
||||
background-color: #ccc;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar-track {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
/* 完整表单容器 */
|
||||
.medical-full-form {
|
||||
width: 100%;
|
||||
min-width: 0; /* 防止内容强制拉伸容器 */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 区域通用样式 */
|
||||
.form-section {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.section-title {
|
||||
margin: 0 0 12px;
|
||||
padding-bottom: 6px;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 通用单行自适应布局(基础信息+病史信息共用) */
|
||||
.single-row-layout {
|
||||
display: flex;
|
||||
flex-wrap: wrap; /* 自动换行 */
|
||||
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
|
||||
gap: 15px; /* 统一元素间距 */
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.row-item {
|
||||
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 基础信息项:适配短输入框 */
|
||||
.row-item:not(.history-item) {
|
||||
min-width: 160px; /* 基础信息项最小宽度 */
|
||||
}
|
||||
|
||||
/* 带单位的输入框样式 */
|
||||
.input-with-unit {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
.input-with-unit .el-input {
|
||||
flex: 1;
|
||||
}
|
||||
.unit {
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
white-space: nowrap;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 单行表单项样式(主诉、查体等) */
|
||||
.form-item-single {
|
||||
margin: 18px 0;
|
||||
}
|
||||
|
||||
/* 必填项红色星号 */
|
||||
.required .el-form-item__label::before {
|
||||
content: '* ';
|
||||
color: #ff4d4f;
|
||||
}
|
||||
|
||||
/* 输入框统一样式 */
|
||||
.el-form-item .el-input,
|
||||
.el-form-item .el-input__wrapper {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.el-form-item .el-input__inner {
|
||||
font-size: 14px;
|
||||
padding: 8px 12px;
|
||||
}
|
||||
|
||||
/* 确保textarea的rows属性生效 */
|
||||
.el-textarea__inner {
|
||||
min-height: auto !important;
|
||||
height: auto !important;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
/* 根据rows属性设置高度 */
|
||||
.el-input--textarea {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* 响应式调整 */
|
||||
@media (max-width: 768px) {
|
||||
.medical-form {
|
||||
height: 80vh;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.form-scroll-container {
|
||||
height: calc(100% - 35px);
|
||||
max-height: none;
|
||||
}
|
||||
.el-form {
|
||||
label-width: 70px !important;
|
||||
}
|
||||
.row-item:not(.history-item) {
|
||||
min-width: 130px;
|
||||
}
|
||||
.history-item {
|
||||
min-width: 100%; /* 移动端病史信息全屏宽度,单行显示 */
|
||||
}
|
||||
.form-item-single,
|
||||
.form-section {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="business">
|
||||
<el-table
|
||||
<!-- <el-table
|
||||
:data="tableDataSource"
|
||||
border
|
||||
stripe
|
||||
@@ -30,11 +30,11 @@
|
||||
@click="handleDelete(scope.row)"
|
||||
:disabled="admissionDataForm !== undefined"
|
||||
>
|
||||
删除
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-table> -->
|
||||
|
||||
<div name="跌倒/坠床评估护理记录单" class="changeMajor" style="width: 99.9%">
|
||||
<div>
|
||||
@@ -202,9 +202,17 @@ defineOptions({
|
||||
});
|
||||
import { ref, reactive, computed, onMounted } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { patientInfo } from '../views/doctorstation/components/store/patient';
|
||||
|
||||
// import { webapp_ws_ajax_run, urlAddRandomNo } from '@/utils/grwebapp';
|
||||
// import { useRoute, useRouter } from 'vue-router';
|
||||
// 定义props和emits
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
});
|
||||
const emits = defineEmits(['submitOk']);
|
||||
|
||||
// 响应式数据
|
||||
const route = useRoute();
|
||||
@@ -515,29 +523,48 @@ const onSubmit = async () => {
|
||||
|
||||
if (isFormEmpty.value) {
|
||||
ElMessage.error('请填写跌倒/坠床评估护理记录单后再进行操作');
|
||||
} else {
|
||||
form.totalScore = totalScore.value;
|
||||
return;
|
||||
}
|
||||
|
||||
// 模拟保存数据,不再调用后端API
|
||||
console.log('保存的数据:', form);
|
||||
// 表单验证通过,收集数据
|
||||
form.totalScore = totalScore.value;
|
||||
|
||||
try {
|
||||
// 准备保存的数据
|
||||
const saveData = {
|
||||
...form,
|
||||
// 添加患者相关信息
|
||||
patientId: patientId.value,
|
||||
visitId: visitId.value,
|
||||
wardCode: wardCode.value,
|
||||
// 确保选中项数组存在
|
||||
bedFallRiskAssessmentList: form.bedFallRiskAssessmentList || [],
|
||||
patientCareSessionsCheckedList: form.patientCareSessionsCheckedList || [],
|
||||
};
|
||||
|
||||
// 提交表单数据
|
||||
console.log('提交保存的数据:', saveData);
|
||||
emits('submitOk', saveData);
|
||||
|
||||
// 更新本地数据
|
||||
if (updateFlag.value) {
|
||||
// 模拟更新操作
|
||||
// 更新操作
|
||||
const updatedIndex = tableDataSource.value.findIndex((item) => item.id === updateId.value);
|
||||
if (updatedIndex !== -1) {
|
||||
tableDataSource.value[updatedIndex].content = { ...form };
|
||||
}
|
||||
ElMessage.success('模拟更新成功');
|
||||
ElMessage.success('更新成功');
|
||||
} else {
|
||||
// 模拟新增操作
|
||||
// 新增操作
|
||||
const newRecord = {
|
||||
id: Date.now().toString(),
|
||||
content: { ...form },
|
||||
};
|
||||
tableDataSource.value.unshift(newRecord);
|
||||
ElMessage.success('模拟新增成功');
|
||||
ElMessage.success('保存成功');
|
||||
}
|
||||
|
||||
// 处理返回逻辑
|
||||
if (admissionDataForm.value !== undefined) {
|
||||
const admissionDataBack = JSON.parse(admissionDataForm.value);
|
||||
admissionDataBack.project2 = totalScore.value;
|
||||
@@ -558,7 +585,11 @@ const onSubmit = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
reset();
|
||||
} catch (error) {
|
||||
console.error('保存失败:', error);
|
||||
ElMessage.error('保存失败,请重试');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -815,7 +846,13 @@ onMounted(() => {
|
||||
wardCode.value = window.localStorage.getItem('wardInfo') || '';
|
||||
admissionDataForm.value = route.params.admissionData;
|
||||
|
||||
// 自动初始化表格数据,不再依赖患者ID参数
|
||||
// 获取患者信息
|
||||
if (patientInfo.value) {
|
||||
patientId.value = patientInfo.value.patientId || '';
|
||||
visitId.value = patientInfo.value.visitId || '';
|
||||
}
|
||||
|
||||
// 自动初始化表格数据
|
||||
// 延迟执行,确保所有数据都已初始化
|
||||
setTimeout(() => {
|
||||
init();
|
||||
@@ -828,6 +865,9 @@ onMounted(() => {
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
|
||||
// 暴露接口
|
||||
defineExpose({ form, submit: onSubmit, reset });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -835,7 +875,7 @@ onMounted(() => {
|
||||
background: white;
|
||||
border-radius: 5px;
|
||||
padding: 10px 16px;
|
||||
height: calc(100vh - var(--barHeight) * 1px - 50px);
|
||||
height: calc(100vh - 250px);
|
||||
overflow: auto;
|
||||
display: grid;
|
||||
grid-row-gap: 16px;
|
||||
|
||||
@@ -2,13 +2,23 @@
|
||||
<div class="hospital-record-form">
|
||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane label="病案首页(一)" name="first">
|
||||
<medicalRecordFirst :formData="formData"></medicalRecordFirst>
|
||||
<medicalRecordFirst
|
||||
ref="firstRef"
|
||||
:formData="formData"
|
||||
@onCaseFirst="updateCaseFirstDatas"
|
||||
></medicalRecordFirst>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="病案首页(二)" name="second">
|
||||
<medicalRecordSecond :formData="formData"></medicalRecordSecond>
|
||||
<medicalRecordSecond
|
||||
:formData="formData"
|
||||
@onCaseSecond="updateCaseFirstDatas"
|
||||
></medicalRecordSecond>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="病案附页(一)" name="third">
|
||||
<medicalRecordThird :formData="formData"></medicalRecordThird>
|
||||
<medicalRecordThird
|
||||
:formData="formData"
|
||||
@onCaseThird="updateCaseFirstDatas"
|
||||
></medicalRecordThird>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
@@ -24,6 +34,7 @@ defineOptions({
|
||||
name: 'HospitalRecordForm',
|
||||
});
|
||||
import { ref, reactive } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
// import medicalRecordFirst from './components/medicalRecordFirst.vue';
|
||||
import medicalRecordFirst from '@/views/hospitalRecord/components/medicalRecordFirst.vue';
|
||||
import medicalRecordSecond from '@/views/hospitalRecord/components/medicalRecordSecond.vue';
|
||||
@@ -31,66 +42,266 @@ import medicalRecordThird from '@/views/hospitalRecord/components/medicalRecordT
|
||||
import medicalRecordFirstPrint from '@/views/hospitalRecord/components/medicalRecordFirstPrint.json';
|
||||
import medicalRecordSecondPrint from '@/views/hospitalRecord/components/medicalRecordSecondPrint.json';
|
||||
import medicalRecordThirdPrint from '@/views/hospitalRecord/components/medicalRecordThirdPrint.json';
|
||||
|
||||
import formDataJs from '../views/doctorstation/components/store/medicalpage';
|
||||
import { cloneDeep } from 'lodash';
|
||||
const firstRef = ref();
|
||||
const commpoentType = 'medicalRecord';
|
||||
const emit = defineEmits(['submitOk']);
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
hospital: {
|
||||
orgCode: '41275054-7',
|
||||
paymentMethod: '城乡居民基本医疗保险'
|
||||
//医院信息
|
||||
hospitalInfo: {
|
||||
//组织机构代码
|
||||
orgCode: '41275054-700000',
|
||||
//医疗付款方式
|
||||
medicalPaymentCode: '',
|
||||
},
|
||||
patient: {
|
||||
//患者信息
|
||||
patientInfo: {
|
||||
// 健康卡号
|
||||
healthCardNo: '',
|
||||
name: '',
|
||||
// 患者姓名
|
||||
patientName: '',
|
||||
// 患者性别
|
||||
gender: '',
|
||||
// 出生日期
|
||||
birthDate: '',
|
||||
// 年龄
|
||||
age: '',
|
||||
// 国籍
|
||||
nationality: '中国',
|
||||
// 籍贯
|
||||
nativePlace: '',
|
||||
// 民族
|
||||
ethnicity: '汉族',
|
||||
// 身份证号
|
||||
idCardNo: '',
|
||||
// 户口住址
|
||||
householdAddress: '',
|
||||
workUnit: '',
|
||||
// 工作单位地址
|
||||
workUnitAddress: '',
|
||||
// 联系人姓名
|
||||
contactName: '',
|
||||
// 关系
|
||||
contactRelation: '',
|
||||
// 联系人地址
|
||||
contactAddress: '',
|
||||
contactPhone: ''
|
||||
// 联系人电话
|
||||
contactPhone: '',
|
||||
},
|
||||
// 住院信息
|
||||
admission: {
|
||||
// 第几次住院
|
||||
times: 1,
|
||||
// 住院号
|
||||
hospitalNo: '',
|
||||
recordNo: '',
|
||||
channel: '',
|
||||
// 病案号
|
||||
medicalRecordNo: '',
|
||||
// 入院途径
|
||||
admissionRoute: '',
|
||||
// 入院时间
|
||||
admitTime: '',
|
||||
// 入院科室
|
||||
department: '',
|
||||
// 病房
|
||||
ward: '',
|
||||
// 确诊日期
|
||||
confirmDate: '',
|
||||
// 出院时间
|
||||
dischargeTime: '',
|
||||
// 出院科室
|
||||
dischargeDepartment: '',
|
||||
// 病房
|
||||
dischargeWard: '',
|
||||
hospitalDays: ''
|
||||
// 实际住院天数
|
||||
hospitalDays: '',
|
||||
},
|
||||
// 诊断信息
|
||||
diagnosis: {
|
||||
// 主要诊断
|
||||
mainDiagnosis: '',
|
||||
otherDiagnosis: ''
|
||||
// 其他诊断
|
||||
otherDiagnosis: '',
|
||||
},
|
||||
// 医疗信息
|
||||
medicalInfo: {
|
||||
// 是否输血
|
||||
bloodTransfusion: '2',
|
||||
// 血型
|
||||
bloodType: '',
|
||||
// rh类型
|
||||
rhType: '',
|
||||
drugAllergy: '1'
|
||||
// 药物过敏史
|
||||
drugAllergy: '1',
|
||||
},
|
||||
// 医师信息
|
||||
doctorInfo: {
|
||||
// 科主任
|
||||
departmentDirector: '',
|
||||
// 副主任
|
||||
chiefPhysician: '',
|
||||
// 主治医师
|
||||
attendingPhysician: '',
|
||||
// 住院医师
|
||||
residentPhysician: '',
|
||||
// 责任护士
|
||||
chargeNurse: '',
|
||||
// 住院总医师
|
||||
chiefResident: '',
|
||||
// 实习医师
|
||||
intern: '',
|
||||
// 病案质量
|
||||
recordQuality: '1',
|
||||
// 编码员
|
||||
coder: '',
|
||||
qualityControlDate: ''
|
||||
}
|
||||
// 控制日期
|
||||
qualityControlDate: '',
|
||||
},
|
||||
// 病案首页2
|
||||
medicalSecond: {
|
||||
// 手术方式
|
||||
surgeryType: '',
|
||||
// 离院方式
|
||||
leaveType: '',
|
||||
// 是否计划出院
|
||||
isPlan: '',
|
||||
// 目的
|
||||
purpose: '',
|
||||
//昏迷时间---入院前
|
||||
comaDurationTime_before: '',
|
||||
//昏迷时间---入院后
|
||||
comaDurationTime_after: '',
|
||||
// 肿瘤分期
|
||||
tumorStaging: '',
|
||||
// T
|
||||
tumor_T: '',
|
||||
// N
|
||||
tumor_N: '',
|
||||
// M
|
||||
tumor_M: '',
|
||||
// 判断依据
|
||||
judgmentBase: '',
|
||||
// 分化程度
|
||||
degreeDifferentiation: '',
|
||||
// 临床路径
|
||||
enterPath: '',
|
||||
// 变异
|
||||
mutation: '',
|
||||
// 退出路径
|
||||
outPath: '',
|
||||
// 特级护理
|
||||
nursingLevel_spec: '',
|
||||
// 1级护理
|
||||
nursingLevel_1: '',
|
||||
// 2级护理
|
||||
nursingLevel_2: '',
|
||||
// 3级护理
|
||||
nursingLevel_3: '',
|
||||
// 呼吸机使用
|
||||
ventilatorUse: '',
|
||||
// 有创呼吸机使用小时
|
||||
ventilatorUseTime: '',
|
||||
// 手术表
|
||||
tableData_top: [],
|
||||
},
|
||||
// 病案首页3
|
||||
// 住院费用
|
||||
hospitalization: {
|
||||
// 总费用
|
||||
hosCharges: '',
|
||||
// 自付金额
|
||||
hosCharges_self: '',
|
||||
},
|
||||
// 综合医疗服务类
|
||||
medicalServices: {
|
||||
// 一般医疗服务类
|
||||
medicalServices_1: '',
|
||||
// 一般治疗操作费
|
||||
medicalServices_2: '',
|
||||
// 护理费
|
||||
medicalServices_3: '',
|
||||
// 其他费用
|
||||
medicalServices_4: '',
|
||||
},
|
||||
// 诊断类
|
||||
diagnosisClass: {
|
||||
// 病理诊断
|
||||
diagnosis_5: '',
|
||||
// 实验室诊断
|
||||
diagnosis_6: '',
|
||||
// 影像学诊断
|
||||
diagnosis_7: '',
|
||||
// 临床诊断
|
||||
diagnosis_8: '',
|
||||
},
|
||||
// 治疗类
|
||||
treatmentClass: {
|
||||
// 非手术治疗项目费
|
||||
treatment_9: '',
|
||||
// 临床物理治疗
|
||||
treatment_9_1: '',
|
||||
// 手术治疗费
|
||||
treatment_10: '',
|
||||
// 麻醉费
|
||||
treatment_10_1: '',
|
||||
// 手术费
|
||||
treatment_10_2: '',
|
||||
},
|
||||
// 康复类
|
||||
recoveryClass: {
|
||||
// 康复费
|
||||
recovery_11: '',
|
||||
},
|
||||
// 中医类
|
||||
TCMClass: {
|
||||
// 中医治疗费
|
||||
TCM_12: '',
|
||||
},
|
||||
// 西药类
|
||||
WesternClass: {
|
||||
// 西药费
|
||||
Western_13: '',
|
||||
// 抗菌药物费
|
||||
Western_13_1: '',
|
||||
},
|
||||
// 中药类
|
||||
chineseClass: {
|
||||
//中成药
|
||||
chinese_14: '',
|
||||
// 中草药
|
||||
chinese_15: '',
|
||||
},
|
||||
// 血液和血液制品类
|
||||
bloodClass: {
|
||||
// 血费
|
||||
blood_16: '',
|
||||
// 蛋白类制品费
|
||||
blood_17: '',
|
||||
// 球蛋白制品费
|
||||
blood_18: '',
|
||||
// 凝血因子制品费
|
||||
blood_19: '',
|
||||
// 细胞因子制品费
|
||||
blood_20: '',
|
||||
},
|
||||
// 耗材类
|
||||
consumablesClass: {
|
||||
// 检查用一次性医用材料费
|
||||
consumables_21: '',
|
||||
// 治疗用一次性医用材料费
|
||||
consumables_22: '',
|
||||
// 手术用一次性医用材料费
|
||||
consumables_23: '',
|
||||
},
|
||||
// 其他类
|
||||
otherClass: {
|
||||
// 其他费用
|
||||
other_24: '',
|
||||
},
|
||||
// 其他诊断及手术附加页
|
||||
tableData_sub: [],
|
||||
// 手术操作数组
|
||||
tableData_top: [],
|
||||
});
|
||||
|
||||
const activeName = ref('first');
|
||||
@@ -99,13 +310,13 @@ const activeName = ref('first');
|
||||
const printForm = () => {
|
||||
// 创建一个新的打印窗口
|
||||
const printWindow = window.open('', '_blank');
|
||||
let printContent
|
||||
let printContent;
|
||||
// 获取模板字符串并替换转义的插值标记
|
||||
if(activeName.value == 'first') {
|
||||
if (activeName.value == 'first') {
|
||||
printContent = medicalRecordFirstPrint.printContent;
|
||||
}else if(activeName.value == 'second') {
|
||||
} else if (activeName.value == 'second') {
|
||||
printContent = medicalRecordSecondPrint.printContent;
|
||||
}else {
|
||||
} else {
|
||||
printContent = medicalRecordThirdPrint.printContent;
|
||||
}
|
||||
// 这里可以进行实际的数据替换操作
|
||||
@@ -116,34 +327,266 @@ const printForm = () => {
|
||||
// 将内容写入打印窗口并打印
|
||||
printWindow.document.write(printContent);
|
||||
printWindow.document.close();
|
||||
}
|
||||
};
|
||||
|
||||
function handleClick() {
|
||||
|
||||
console.log('112313413');
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
Object.keys(formData).forEach(key => {
|
||||
if (typeof formData[key] === 'object') {
|
||||
Object.keys(formData[key]).forEach(subKey => {
|
||||
formData[key][subKey] = '';
|
||||
});
|
||||
const resetFun = (data) => {
|
||||
Object.keys(data).forEach((key) => {
|
||||
if (data[key] instanceof Array) {
|
||||
data[key].length = 0;
|
||||
} else {
|
||||
formData[key] = '';
|
||||
data[key] = '';
|
||||
}
|
||||
});
|
||||
|
||||
// 重置默认值
|
||||
formData.hospital.orgCode = '41275054-7';
|
||||
formData.hospital.paymentMethod = '城乡居民基本医疗保险';
|
||||
formData.patient.nationality = '中国';
|
||||
formData.patient.ethnicity = '汉族';
|
||||
formData.admission.times = 1;
|
||||
formData.medicalInfo.bloodTransfusion = '2';
|
||||
formData.medicalInfo.drugAllergy = '1';
|
||||
formData.doctorInfo.recordQuality = '1';
|
||||
};
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
if (activeName.value == 'first') {
|
||||
resetFun(firstRef.value.formData.hospitalInfo);
|
||||
resetFun(firstRef.value.formData.patientInfo);
|
||||
resetFun(firstRef.value.formData.admission);
|
||||
resetFun(firstRef.value.formData.diagnosis);
|
||||
resetFun(firstRef.value.formData.medicalInfo);
|
||||
resetFun(firstRef.value.formData.doctorInfo);
|
||||
} else if (activeName.value == 'second') {
|
||||
resetFun(firstRef.value.formData.medicalSecond);
|
||||
} else {
|
||||
resetFun(firstRef.value.formData.hospitalization);
|
||||
resetFun(firstRef.value.formData.medicalServices);
|
||||
resetFun(firstRef.value.formData.diagnosisClass);
|
||||
resetFun(firstRef.value.formData.treatmentClass);
|
||||
resetFun(firstRef.value.formData.recoveryClass);
|
||||
resetFun(firstRef.value.formData.TCMClass);
|
||||
resetFun(firstRef.value.formData.WesternClass);
|
||||
resetFun(firstRef.value.formData.chineseClass);
|
||||
resetFun(firstRef.value.formData.bloodClass);
|
||||
resetFun(firstRef.value.formData.consumablesClass);
|
||||
resetFun(firstRef.value.formData.otherClass);
|
||||
firstRef.value.formData.tableData_sub.length = 0;
|
||||
firstRef.value.formData.tableData_top.length = 0;
|
||||
}
|
||||
};
|
||||
//自定义事件更新主数据
|
||||
const updateCaseFirstDatas = (newDatas) => {
|
||||
Object.assign(formData, newDatas);
|
||||
};
|
||||
// 点击历史数据回传布局
|
||||
const setFormData = (data) => {
|
||||
Object.assign(firstRef.value.formData, data);
|
||||
};
|
||||
//保存数据方法
|
||||
const submit = () => {
|
||||
/*
|
||||
{
|
||||
"encounterId": "1987758365116919809",
|
||||
"statusEnum": 5,
|
||||
"busNo": "ZY202511100001",
|
||||
"inHospitalTime": "2025-11-10 13:47:08",
|
||||
"outHospitalTime": null,
|
||||
"patientId": "1981311362744872962",
|
||||
"patientName": "王海明",
|
||||
"genderEnum": 0,
|
||||
"genderEnum_enumText": "男性",
|
||||
"birthDate": "1999-06-18 00:00:00",
|
||||
"age": "26岁",
|
||||
"wardName": "内科病区1",
|
||||
"houseName": "内科病房2",
|
||||
"bedName": "002",
|
||||
"inOrgTime": "2025-11-10 19:36:28",
|
||||
"inHospitalDays": 2,
|
||||
"inHospitalOrgId": "1950367917287616513",
|
||||
"inHospitalOrgName": "住院内科",
|
||||
"contractNo": "0000",
|
||||
"contractName": "自费",
|
||||
"regDiagnosisName": "感冒",
|
||||
"accountId": "1987759000528809985"
|
||||
}
|
||||
*/
|
||||
// const isOk = verifyMethod(formDataJs);
|
||||
if (1) {
|
||||
const cloneParams = cloneDeep(formDataJs);
|
||||
|
||||
// 病例二表
|
||||
const medicalSecondTable = cloneParams.medicalSecond.surgery_tableData.filter((obj) => {
|
||||
return obj.isChoose;
|
||||
});
|
||||
// 病例三表第一张表
|
||||
const other_tableData = cloneParams.other_tableData.filter((obj) => {
|
||||
return obj.isChoose;
|
||||
});
|
||||
// 病例三表第二张表
|
||||
const surgery_tableData = cloneParams.surgery_tableData.filter((obj) => {
|
||||
return obj.isChoose;
|
||||
});
|
||||
// 数据整理
|
||||
let params = {
|
||||
...cloneParams,
|
||||
other_tableData,
|
||||
surgery_tableData,
|
||||
};
|
||||
params.medicalSecond.surgery_tableData = medicalSecondTable;
|
||||
console.log('cloneParams========>', JSON.stringify(params));
|
||||
emit('submitOk', params);
|
||||
}
|
||||
};
|
||||
|
||||
// 公共校验方法
|
||||
const verifyMethod = (data) => {
|
||||
let message = '';
|
||||
if (!data) return false;
|
||||
if (!data.hospitalInfo.orgCode) {
|
||||
message = '请填写组织机构代码';
|
||||
} else if (!data.hospitalInfo.medicalPaymentCode) {
|
||||
message = '请选择医疗付费方式';
|
||||
} else if (!data.patientInfo.healthCardNo) {
|
||||
message = '请填写健康卡号';
|
||||
} else if (!data.patientInfo.patientName) {
|
||||
message = '请填患者姓名';
|
||||
} else if (!data.patientInfo.gender) {
|
||||
message = '请选择患者性别';
|
||||
} else if (!data.patientInfo.birthDate) {
|
||||
message = '请选择出生日期';
|
||||
} else if (!data.patientInfo.age) {
|
||||
message = '请填写患者年龄';
|
||||
} else if (!data.patientInfo.nationality) {
|
||||
message = '请填写国籍';
|
||||
} else if (!data.patientInfo.nativePlace) {
|
||||
message = '请填写籍贯';
|
||||
} else if (!data.patientInfo.ethnicity) {
|
||||
message = '请填写民族';
|
||||
} else if (!data.patientInfo.idCardNo) {
|
||||
message = '请填写身份证号';
|
||||
} else if (!data.patientInfo.householdAddress) {
|
||||
message = '请填写户口地址';
|
||||
} else if (!data.patientInfo.workUnitAddress) {
|
||||
message = '请填写工作单位及地址';
|
||||
} else if (!data.patientInfo.contactName) {
|
||||
message = '请填写联系人姓名';
|
||||
} else if (!data.patientInfo.contactRelation) {
|
||||
message = '请填写与联系人关系';
|
||||
} else if (!data.patientInfo.contactAddress) {
|
||||
message = '请填写地址';
|
||||
} else if (!data.patientInfo.contactPhone) {
|
||||
message = '请填写电话';
|
||||
} else if (!data.admission.times) {
|
||||
message = '请填写第几次住院';
|
||||
} else if (!data.admission.hospitalNo) {
|
||||
message = '请填写住院号';
|
||||
} else if (!data.admission.medicalRecordNo) {
|
||||
message = '请填写病案号';
|
||||
} else if (!data.admission.admissionRoute) {
|
||||
message = '请填写入院途径';
|
||||
} else if (!data.admission.admitTime) {
|
||||
message = '请填写入院时间';
|
||||
} else if (!data.admission.department) {
|
||||
message = '请填写入院科室';
|
||||
} else if (!data.admission.ward) {
|
||||
message = '请填写病房';
|
||||
} else if (!data.admission.confirmDate) {
|
||||
message = '请填写确诊日期';
|
||||
} else if (!data.admission.dischargeTime) {
|
||||
message = '请填写出院时间';
|
||||
} else if (!data.admission.dischargeDepartment) {
|
||||
message = '请填写出院科室';
|
||||
} else if (!data.admission.dischargeWard) {
|
||||
message = '请填写病房';
|
||||
} else if (!data.admission.hospitalDays) {
|
||||
message = '请填写实际住院天数';
|
||||
} else if (!data.diagnosis.mainDiagnosis) {
|
||||
message = '请填写主要诊断';
|
||||
} else if (!data.diagnosis.otherDiagnosis) {
|
||||
message = '请填写其他诊断';
|
||||
} else if (!data.medicalInfo.bloodTransfusion) {
|
||||
message = '请选择是否输血';
|
||||
} else if (!data.medicalInfo.bloodType) {
|
||||
message = '请选择血型';
|
||||
} else if (!data.medicalInfo.rhType) {
|
||||
message = '请选择rh类型';
|
||||
} else if (!data.medicalInfo.drugAllergy) {
|
||||
message = '请选择药物过敏史';
|
||||
} else if (!data.doctorInfo.departmentDirector) {
|
||||
message = '请填写科主任';
|
||||
} else if (!data.doctorInfo.chiefPhysician) {
|
||||
message = '请填写主任(副主任)医师';
|
||||
} else if (!data.doctorInfo.attendingPhysician) {
|
||||
message = '请填写主治医师';
|
||||
} else if (!data.doctorInfo.residentPhysician) {
|
||||
message = '请填写住院医师';
|
||||
} else if (!data.doctorInfo.chargeNurse) {
|
||||
message = '请填写责任护士';
|
||||
} else if (!data.doctorInfo.chiefResident) {
|
||||
message = '请填写住院总医师';
|
||||
} else if (!data.doctorInfo.intern) {
|
||||
message = '请填写实习医师';
|
||||
} else if (!data.doctorInfo.recordQuality) {
|
||||
message = '请填写病案质量';
|
||||
} else if (!data.doctorInfo.coder) {
|
||||
message = '请填写编码员';
|
||||
} else if (!data.doctorInfo.qualityControlDate) {
|
||||
message = '请选择质控日期';
|
||||
} else if (!data.medicalSecond.tableData_top) {
|
||||
message = '请添加手术操作表';
|
||||
} else if (!data.medicalSecond.surgeryType) {
|
||||
message = '请填写手术方式';
|
||||
} else if (!data.medicalSecond.leaveType) {
|
||||
message = '请选择离院方式';
|
||||
} else if (!data.medicalSecond.isPlan) {
|
||||
message = '请选择是否有出院31天内再住院计划';
|
||||
} else if (!data.medicalSecond.purpose) {
|
||||
message = '请填写目的';
|
||||
} else if (!data.medicalSecond.comaDurationTime_before) {
|
||||
message = '请选择颅脑损伤患者昏迷时间-入院前';
|
||||
} else if (!data.medicalSecond.comaDurationTime_after) {
|
||||
message = '请选择颅脑损伤患者昏迷时间-入院后';
|
||||
} else if (!data.medicalSecond.tumorStaging) {
|
||||
message = '请填写肿瘤分期';
|
||||
} else if (!data.medicalSecond.tumor_T) {
|
||||
message = '请填写T';
|
||||
} else if (!data.medicalSecond.tumor_N) {
|
||||
message = '请填写N';
|
||||
} else if (!data.medicalSecond.tumor_M) {
|
||||
message = '请填写M';
|
||||
} else if (!data.medicalSecond.judgmentBase) {
|
||||
message = '请填写判断依据';
|
||||
} else if (!data.medicalSecond.degreeDifferentiation) {
|
||||
message = '请选择分化程度';
|
||||
} else if (!data.medicalSecond.enterPath) {
|
||||
message = '请填写临床路径-进入路径';
|
||||
} else if (!data.medicalSecond.mutation) {
|
||||
message = '请选择是否变异';
|
||||
} else if (!data.medicalSecond.outPath) {
|
||||
message = '请选择退出路径';
|
||||
} else if (!data.medicalSecond.nursingLevel_spec) {
|
||||
message = '请填写特级护理';
|
||||
} else if (!data.medicalSecond.nursingLevel_1) {
|
||||
message = '请填写1级护理';
|
||||
} else if (!data.medicalSecond.nursingLevel_2) {
|
||||
message = '请填写2级护理';
|
||||
} else if (!data.medicalSecond.nursingLevel_3) {
|
||||
message = '请填写3级护理';
|
||||
} else if (!data.medicalSecond.ventilatorUse) {
|
||||
message = '请选择是否使用呼吸机使用';
|
||||
} else if (!data.medicalSecond.ventilatorUseTime) {
|
||||
message = '请填写有创呼吸机使用时间(小时)';
|
||||
}
|
||||
if (message.length > 0) {
|
||||
ElMessage({
|
||||
message,
|
||||
type: 'error',
|
||||
});
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
defineExpose({
|
||||
submit,
|
||||
commpoentType,
|
||||
setFormData,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -213,7 +656,9 @@ label {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
input, select, textarea {
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
border: 1px solid #ccc;
|
||||
@@ -234,7 +679,8 @@ textarea {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.print-btn, .reset-btn {
|
||||
.print-btn,
|
||||
.reset-btn {
|
||||
padding: 10px 20px;
|
||||
margin: 0 10px;
|
||||
border: none;
|
||||
@@ -244,7 +690,7 @@ textarea {
|
||||
}
|
||||
|
||||
.print-btn {
|
||||
background-color: #4CAF50;
|
||||
background-color: #4caf50;
|
||||
color: white;
|
||||
}
|
||||
|
||||
@@ -275,4 +721,4 @@ textarea {
|
||||
margin: 2cm;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
393
openhis-ui-vue3/src/template/ProgressNoteform.vue
Normal file
393
openhis-ui-vue3/src/template/ProgressNoteform.vue
Normal file
@@ -0,0 +1,393 @@
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue';
|
||||
|
||||
// 1. 基础信息(复用已有变量,补充一致性格式)
|
||||
const patientInfo = ref({
|
||||
name: '',
|
||||
department: '',
|
||||
bed: '',
|
||||
inpatientNo: '',
|
||||
});
|
||||
|
||||
defineOptions({
|
||||
name: 'ProgressNoteform',
|
||||
});
|
||||
|
||||
// 2. 首次病程记录(复用已有变量,补充文本格式)
|
||||
const firstRecordTime = ref('');
|
||||
const firstRecordIntro = ref(
|
||||
''
|
||||
);
|
||||
const caseFeatures =
|
||||
ref('');
|
||||
|
||||
const chinaDiscussion = ref('');
|
||||
|
||||
const westDiscussion = ref('');
|
||||
|
||||
const preliminaryDiagnosis = ref('');
|
||||
|
||||
const treatmentPlan = ref(''); // 添加缺失的变量
|
||||
|
||||
// 3. 后续查房/会诊记录(新增,还原PDF所有章节)
|
||||
const roundRecords = ref([
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '主治医师签名:' }, // 区分普通医师和主治医师签名
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '副主任医师签名:' },
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '' },
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '' },
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '' },
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '' },
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '' },
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
time: '',
|
||||
content: '',
|
||||
signature: { doctor: '', physician: '' },
|
||||
},
|
||||
]);
|
||||
|
||||
// 4. 签名变量(支持所有记录的签名输入)
|
||||
interface Signatures {
|
||||
firstDoctor: string;
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
const signatures = ref<Signatures>({
|
||||
firstDoctor: '', // 首次病程记录医师签名
|
||||
...roundRecords.value.reduce((acc, record, index) => {
|
||||
acc[`round${index}Doctor`] = '';
|
||||
acc[`round${index}Physician`] = '';
|
||||
return acc;
|
||||
}, {} as Record<string, string>),
|
||||
});
|
||||
|
||||
// 5. 打印功能:控制打印范围+样式
|
||||
const handlePrint = () => {
|
||||
// 1. 触发浏览器打印
|
||||
window.print();
|
||||
};
|
||||
|
||||
// 暴露接口
|
||||
defineExpose({ patientInfo, firstRecordTime, firstRecordIntro, caseFeatures, chinaDiscussion, westDiscussion, preliminaryDiagnosis, treatmentPlan, roundRecords, signatures });
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="medical-record-container">
|
||||
<!-- 打印按钮:固定在顶部,非打印内容 -->
|
||||
<div class="print-btn-container no-print">
|
||||
<el-button type="primary" @click="handlePrint">打印病历</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 病历主体:打印核心内容 -->
|
||||
<div class="medical-record">
|
||||
<!-- 1. 医院头部(每一页PDF均包含,复用已有样式) -->
|
||||
<div class="hospital-header">
|
||||
<img src="./imgs/logo.png" alt="长春市朝阳区中医院Logo" class="header-logo" />
|
||||
<h1 class="hospital-name">长春市朝阳区中医院</h1>
|
||||
</div>
|
||||
|
||||
<!-- 2. 患者信息栏(每一页PDF均包含,下划线样式) -->
|
||||
<div class="patient-info">
|
||||
<span class="info-item">姓名:{{ patientInfo.name }}</span>
|
||||
<span class="info-item">科室:{{ patientInfo.department }}</span>
|
||||
<span class="info-item">床号:{{ patientInfo.bed }}</span>
|
||||
<span class="info-item">住院号:{{ patientInfo.inpatientNo }}</span>
|
||||
</div>
|
||||
|
||||
<!-- 3. 首次病程记录 -->
|
||||
<div class="record-section">
|
||||
<h2 class="section-main-title">首 次 病 程 记 录</h2>
|
||||
<div class="record-time">{{ firstRecordTime }}</div>
|
||||
<el-input v-model="firstRecordIntro" autosize type="textarea" class="clean-textarea" />
|
||||
|
||||
<!-- 病例特点 -->
|
||||
<h3 class="section-sub-title">一、病例特点</h3>
|
||||
<el-input v-model="caseFeatures" autosize type="textarea" class="clean-textarea" />
|
||||
|
||||
<!-- 拟诊讨论 -->
|
||||
<h3 class="section-sub-title">二、拟诊讨论</h3>
|
||||
<el-input v-model="chinaDiscussion" autosize type="textarea" class="clean-textarea" />
|
||||
<el-input v-model="westDiscussion" autosize type="textarea" class="clean-textarea" />
|
||||
|
||||
<!-- 初步诊断 -->
|
||||
<el-input v-model="preliminaryDiagnosis" autosize type="textarea" class="clean-textarea" />
|
||||
|
||||
<!-- 诊疗计划 -->
|
||||
<el-input v-model="treatmentPlan" autosize type="textarea" class="clean-textarea" />
|
||||
|
||||
<!-- 首次病程记录签名 -->
|
||||
<div class="signature-group">
|
||||
<span class="signature-label">医师签名:</span>
|
||||
<el-input v-model="signatures.firstDoctor" autosize type="textarea" class="clean-textarea signature-input"
|
||||
:rows="1" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 4. 分页分隔线(模拟PDF分页,打印时自动分页) -->
|
||||
<div class="page-break"></div>
|
||||
|
||||
<!-- 5. 后续查房/会诊记录(按时间顺序) -->
|
||||
<div v-for="(record, index) in roundRecords" :key="index" class="record-section">
|
||||
<!-- 重复患者信息(与PDF一致) -->
|
||||
<div class="patient-info page-repeated-info">
|
||||
<span class="info-item">姓名:{{ patientInfo.name }}</span>
|
||||
<span class="info-item">科室:{{ patientInfo.department }}</span>
|
||||
<span class="info-item">床号:{{ patientInfo.bed }}</span>
|
||||
<span class="info-item">住院号:{{ patientInfo.inpatientNo }}</span>
|
||||
</div>
|
||||
|
||||
<!-- 查房标题+时间 -->
|
||||
<h2 class="section-main-title">{{ record.title }}</h2>
|
||||
<div class="record-time">{{ record.time }}</div>
|
||||
|
||||
<!-- 查房内容 -->
|
||||
<el-input v-model="record.content" autosize type="textarea" class="clean-textarea" />
|
||||
|
||||
<!-- 查房签名(区分普通医师/上级医师) -->
|
||||
<div class="signature-group">
|
||||
<span class="signature-label">医师签名:</span>
|
||||
<el-input v-model="signatures[`round${index}Doctor`]" autosize type="textarea"
|
||||
class="clean-textarea signature-input" :rows="1" />
|
||||
|
||||
<span v-if="record.signature.physician" class="signature-label ml-20">
|
||||
{{ record.signature.physician }}
|
||||
</span>
|
||||
<el-input v-if="record.signature.physician" v-model="signatures[`round${index}Physician`]" autosize
|
||||
type="textarea" class="clean-textarea signature-input" :rows="1" />
|
||||
</div>
|
||||
|
||||
<!-- 分页分隔线(最后一条记录无需分页) -->
|
||||
<div v-if="index !== roundRecords.length - 1" class="page-break"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
/* 1. 容器基础样式 */
|
||||
.medical-record-container {
|
||||
padding: 20px;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.print-btn-container {
|
||||
margin-bottom: 20px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* 2. 病历主体样式(模拟A4纸) */
|
||||
.medical-record {
|
||||
max-width: 210mm;
|
||||
/* A4宽度 */
|
||||
min-height: 297mm;
|
||||
/* A4高度 */
|
||||
margin: 0 auto;
|
||||
padding: 20mm;
|
||||
/* A4页边距 */
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
font-family: 'SimSun', '宋体', serif;
|
||||
/* 病历标准字体 */
|
||||
}
|
||||
|
||||
/* 3. 医院头部样式 */
|
||||
.hospital-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.header-logo {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.hospital-name {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* 4. 患者信息样式 */
|
||||
.patient-info {
|
||||
border-bottom: 1px solid #000;
|
||||
padding: 5px 0;
|
||||
margin-bottom: 15px;
|
||||
font-size: 16px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
margin-right: 30px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* 5. 记录章节样式 */
|
||||
.record-section {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.section-main-title {
|
||||
text-align: center;
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.section-sub-title {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.record-time {
|
||||
font-size: 14px;
|
||||
margin-bottom: 15px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* 6. 签名区域样式 */
|
||||
.signature-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
margin-top: 20px;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.signature-label {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.signature-input {
|
||||
width: 200px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.ml-20 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
/* 7. 分页分隔线(模拟PDF分页) */
|
||||
.page-break {
|
||||
height: 1px;
|
||||
background-color: #eee;
|
||||
margin: 30px 0;
|
||||
page-break-after: always;
|
||||
/* 打印时强制分页 */
|
||||
}
|
||||
|
||||
/* 8. 重复信息样式(后续页面的患者信息) */
|
||||
.page-repeated-info {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* 9. 清洁输入框样式(复用已有,确保无边框) */
|
||||
:deep(.clean-textarea .el-textarea__wrapper) {
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
:deep(.clean-textarea .el-textarea__inner) {
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
resize: none;
|
||||
word-break: break-word;
|
||||
white-space: pre-wrap;
|
||||
overflow-wrap: break-word;
|
||||
font-family: inherit;
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
/* 病历标准行高 */
|
||||
color: #000;
|
||||
}
|
||||
|
||||
:deep(.clean-textarea .el-textarea__inner:focus) {
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* 10. 打印专属样式:控制打印效果 */
|
||||
@media print {
|
||||
|
||||
/* 隐藏非打印内容(如打印按钮) */
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* 强制A4尺寸+无边距 */
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 15mm;
|
||||
/* 打印页边距,匹配PDF */
|
||||
}
|
||||
|
||||
/* 确保背景色打印(部分浏览器默认不打印背景) */
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
/* 病历主体无边框阴影,仅打印内容 */
|
||||
.medical-record {
|
||||
box-shadow: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* 文本不换行优化 */
|
||||
.info-item {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
/* 确保输入框内容正常打印 */
|
||||
:deep(.el-textarea__inner) {
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
BIN
openhis-ui-vue3/src/template/img/logo.png
Normal file
BIN
openhis-ui-vue3/src/template/img/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
openhis-ui-vue3/src/template/imgs/logo.png
Normal file
BIN
openhis-ui-vue3/src/template/imgs/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
351
openhis-ui-vue3/src/template/inHospitalCaseForm.vue
Normal file
351
openhis-ui-vue3/src/template/inHospitalCaseForm.vue
Normal file
@@ -0,0 +1,351 @@
|
||||
<template>
|
||||
<div class="assessment-page">
|
||||
<div class="page-container">
|
||||
<!-- 医院头部 -->
|
||||
<div class="hospital-header">
|
||||
<h1 class="hospital-name">
|
||||
<span class="hospital-text">长春市朝阳区中医院</span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<!-- 页面标题 -->
|
||||
<h2 class="form-title">住院病人风险评估表</h2>
|
||||
|
||||
<!-- 表单卡片 -->
|
||||
<el-card class="form-card">
|
||||
<el-form :model="formData" label-width="100px">
|
||||
<!-- 第一行:科室、床号、住院号 -->
|
||||
<el-row :gutter="16">
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="科室">
|
||||
<el-input
|
||||
v-model="formData.department"
|
||||
readonly="true"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="床号">
|
||||
<el-input
|
||||
v-model="formData.bedNo"
|
||||
readonly="true"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="住院号">
|
||||
<el-input
|
||||
v-model="formData.busNo"
|
||||
readonly="true"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 第二行:姓名、性别、年龄 -->
|
||||
<el-row :gutter="16">
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="姓名">
|
||||
<el-input
|
||||
v-model="formData.patientName"
|
||||
readonly="true"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="性别">
|
||||
<el-input
|
||||
v-model="formData.gender"
|
||||
readonly="true"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="年龄">
|
||||
<el-input
|
||||
v-model="formData.age"
|
||||
readonly="true"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 病情简介 -->
|
||||
<el-form-item label="病情简介">
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="formData.adm_cond"
|
||||
:autosize="{ minRows: 4, maxRows: 10 }"
|
||||
class="full-width-textarea"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 不良后果及预后 -->
|
||||
<el-form-item label="可能发生的不良后果及预后">
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="formData.effectless"
|
||||
:autosize="{ minRows: 1, maxRows: 5 }"
|
||||
class="full-width-textarea"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 评估等级 -->
|
||||
<el-form-item label="评估等级">
|
||||
<el-radio-group v-model="formData.evalLevel">
|
||||
<el-radio label="一般">一般</el-radio>
|
||||
<el-radio label="病重">病重</el-radio>
|
||||
<el-radio label="病危">病危</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 护理等级 -->
|
||||
<el-form-item label="护理等级">
|
||||
<el-radio-group v-model="formData.nurseLevel">
|
||||
<el-radio label="特级护理">特级护理</el-radio>
|
||||
<el-radio label="一级护理">一级护理</el-radio>
|
||||
<el-radio label="二级护理">二级护理</el-radio>
|
||||
<el-radio label="三级护理">三级护理</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 收集资料时间 -->
|
||||
<el-form-item label="收集资料时间">
|
||||
<span class="date-display">{{ currentDate }}</span>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 医师签名 -->
|
||||
<el-row :gutter="16">
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="评估医师签名">
|
||||
<el-input
|
||||
v-model="formData.sign_doc"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="主治医师签名">
|
||||
<el-input
|
||||
v-model="formData.sign_maindoc"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8">
|
||||
<el-form-item label="科主任签名">
|
||||
<el-input
|
||||
v-model="formData.sign_leader"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 1 }"
|
||||
class="auto-resize-input"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, onMounted, nextTick, reactive, ref } from 'vue';
|
||||
|
||||
defineOptions({
|
||||
name: 'InHospitalCaseForm',
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const patient = props.patientInfo;
|
||||
|
||||
// 表单数据 - 修复:将 formData 定义移到 patient 之后
|
||||
const formData = reactive({
|
||||
department: patient?.department || '',
|
||||
bedNo: patient?.bedNo || '',
|
||||
busNo: patient?.busNo || '',
|
||||
patientName: patient?.patientName || '',
|
||||
gender: patient?.sex || '',
|
||||
age: patient?.age || '',
|
||||
adm_cond: '',
|
||||
effectless: '',
|
||||
evalLevel: '',
|
||||
nurseLevel: '',
|
||||
sign_doc: '',
|
||||
sign_maindoc: '',
|
||||
sign_leader: '',
|
||||
});
|
||||
|
||||
// 当前日期(YYYY-MM-DD)
|
||||
const currentDate = computed(() => {
|
||||
const d = new Date();
|
||||
const yyyy = d.getFullYear();
|
||||
const mm = String(d.getMonth() + 1).padStart(2, '0');
|
||||
const dd = String(d.getDate()).padStart(2, '0');
|
||||
return `${yyyy}-${mm}-${dd}`;
|
||||
});
|
||||
|
||||
//表单引用
|
||||
const formRef = ref(null);
|
||||
|
||||
//提交表单
|
||||
const submit = () => {
|
||||
// 如果需要表单验证,可以使用以下代码
|
||||
// formRef.value.validate((valid) => {
|
||||
// if (valid) {
|
||||
// emits('submitOk', formData);
|
||||
// }
|
||||
// });
|
||||
// 简化版本:
|
||||
emits('submitOk', formData);
|
||||
};
|
||||
|
||||
//表单数据赋值
|
||||
const setFormData = (data) => {
|
||||
if (data) {
|
||||
Object.assign(formData, data);
|
||||
}
|
||||
};
|
||||
|
||||
// 定义 emits
|
||||
const emits = defineEmits(['submitOk']);
|
||||
|
||||
onMounted(() => {
|
||||
// 页面加载完成后触发一次 resize 事件,确保输入框高度正确
|
||||
setTimeout(() => {
|
||||
window.dispatchEvent(new Event('resize'));
|
||||
}, 100);
|
||||
});
|
||||
|
||||
//暴露接口
|
||||
defineExpose({ formData, submit, setFormData });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* ===== 页面容器与背景 ===== */
|
||||
.assessment-page {
|
||||
font-family: 'Microsoft YaHei', 宋体, sans-serif;
|
||||
background-color: #f3f4f6;
|
||||
padding: 1.25rem;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
max-width: 48rem;
|
||||
margin: 0 auto;
|
||||
background-color: #ffffff;
|
||||
padding: 1.5rem;
|
||||
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* ===== 医院头部 ===== */
|
||||
.hospital-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.hospital-name {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: #1f2937;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.hospital-text {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/* ===== 表单标题与操作 ===== */
|
||||
.form-title {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
margin: 1.25rem 0;
|
||||
color: #1f2937;
|
||||
}
|
||||
|
||||
/* ===== 表单卡片 ===== */
|
||||
.form-card {
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
:deep(.el-card.form-card) {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
/* ===== 自动调整大小的输入框样式 ===== */
|
||||
.auto-resize-input {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:deep(.auto-resize-input .el-textarea__inner) {
|
||||
overflow: hidden;
|
||||
resize: none;
|
||||
min-height: 32px !important;
|
||||
padding: 5px 12px;
|
||||
}
|
||||
|
||||
/* ===== Textarea 自动扩展样式 ===== */
|
||||
.full-width-textarea {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:deep(.full-width-textarea textarea) {
|
||||
overflow: hidden;
|
||||
resize: none;
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
/* ===== 日期显示 ===== */
|
||||
.date-display {
|
||||
font-size: 0.95rem;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* ===== 响应式调整 ===== */
|
||||
@media (max-width: 768px) {
|
||||
.page-container {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.hospital-name {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -14,7 +14,7 @@
|
||||
label-width="120px"
|
||||
label-align="left"
|
||||
class="doc-content"
|
||||
style="height: 60vh; overflow: scroll;"
|
||||
style="height: 60vh; overflow: scroll"
|
||||
>
|
||||
<!-- 患者与手术基础信息 -->
|
||||
<section class="doc-section">
|
||||
@@ -23,29 +23,29 @@
|
||||
<el-form-item label="患者姓名" prop="patientName" class="grid-item required">
|
||||
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="性别" prop="gender" class="grid-item required">
|
||||
<el-select v-model="formData.gender" placeholder="请选择性别">
|
||||
<el-option label="男" value="男" />
|
||||
<el-option label="女" value="女" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="年龄" prop="age" class="grid-item required">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model.number="formData.age" type="number" placeholder="请输入年龄" />
|
||||
<el-input v-model.number="formData.age" placeholder="请输入年龄" />
|
||||
<span class="unit">岁</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="科室" prop="department" class="grid-item required">
|
||||
<el-input v-model="formData.department" placeholder="如:普外科" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
|
||||
<el-input v-model="formData.bedNo" placeholder="如:502-03" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="手术日期/时间" prop="operationDateTime" class="grid-item required">
|
||||
<el-date-picker
|
||||
v-model="formData.operationDateTime"
|
||||
@@ -64,23 +64,23 @@
|
||||
<el-form-item label="手术者" prop="surgeon" class="grid-item required">
|
||||
<el-input v-model="formData.surgeon" placeholder="主刀医师姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="第一助手" prop="firstAssistant" class="grid-item required">
|
||||
<el-input v-model="formData.firstAssistant" placeholder="第一助手姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="第二助手" prop="secondAssistant" class="grid-item">
|
||||
<el-input v-model="formData.secondAssistant" placeholder="第二助手姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="麻醉医师" prop="anesthesiologist" class="grid-item required">
|
||||
<el-input v-model="formData.anesthesiologist" placeholder="麻醉医师姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="巡回护士" prop="circulatingNurse" class="grid-item required">
|
||||
<el-input v-model="formData.circulatingNurse" placeholder="巡回护士姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="器械护士" prop="scrubNurse" class="grid-item required">
|
||||
<el-input v-model="formData.scrubNurse" placeholder="器械护士姓名" clearable />
|
||||
</el-form-item>
|
||||
@@ -90,11 +90,15 @@
|
||||
<!-- 手术详情 -->
|
||||
<section class="doc-section">
|
||||
<h2 class="section-title">三、手术详情</h2>
|
||||
|
||||
|
||||
<el-form-item label="手术名称" prop="operationName" class="full-width-item required">
|
||||
<el-input v-model="formData.operationName" placeholder="规范手术名称(如:腹腔镜下胆囊切除术)" clearable />
|
||||
<el-input
|
||||
v-model="formData.operationName"
|
||||
placeholder="规范手术名称(如:腹腔镜下胆囊切除术)"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="手术方式" prop="operationMethod" class="full-width-item required">
|
||||
<el-select v-model="formData.operationMethod" placeholder="选择手术方式">
|
||||
<el-option label="开放手术" value="开放手术" />
|
||||
@@ -102,12 +106,20 @@
|
||||
<el-option label="介入手术" value="介入手术" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="手术入路" prop="surgicalApproach" class="full-width-item required">
|
||||
<el-input v-model="formData.surgicalApproach" placeholder="如:右上腹经腹直肌切口" clearable />
|
||||
<el-input
|
||||
v-model="formData.surgicalApproach"
|
||||
placeholder="如:右上腹经腹直肌切口"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="术中发现" prop="intraoperativeFindings" class="full-width-item required">
|
||||
|
||||
<el-form-item
|
||||
label="术中发现"
|
||||
prop="intraoperativeFindings"
|
||||
class="full-width-item required"
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.intraoperativeFindings"
|
||||
type="textarea"
|
||||
@@ -117,7 +129,7 @@
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="手术过程" prop="operationProcess" class="full-width-item required">
|
||||
<el-input
|
||||
v-model="formData.operationProcess"
|
||||
@@ -136,26 +148,34 @@
|
||||
<div class="adaptive-grid">
|
||||
<el-form-item label="术中出血量" prop="bloodLoss" class="grid-item required">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model.number="formData.bloodLoss" type="number" placeholder="请输入出血量" />
|
||||
<el-input
|
||||
v-model.number="formData.bloodLoss"
|
||||
type="number"
|
||||
placeholder="请输入出血量"
|
||||
/>
|
||||
<span class="unit">ml</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="输血情况" prop="bloodTransfusion" class="grid-item">
|
||||
<el-select v-model="formData.bloodTransfusion" placeholder="是否输血">
|
||||
<el-option label="是" value="是" />
|
||||
<el-option label="否" value="否" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="引流管放置" prop="drainageTube" class="grid-item">
|
||||
<el-input v-model="formData.drainageTube" placeholder="如:腹腔引流管1根" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="标本处理" prop="specimenDisposal" class="grid-item required">
|
||||
<el-input v-model="formData.specimenDisposal" placeholder="如:胆囊标本送病理检查" clearable />
|
||||
<el-input
|
||||
v-model="formData.specimenDisposal"
|
||||
placeholder="如:胆囊标本送病理检查"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="手术结束时间" prop="operationEndTime" class="grid-item required">
|
||||
<el-date-picker
|
||||
v-model="formData.operationEndTime"
|
||||
@@ -164,7 +184,7 @@
|
||||
value-format="YYYY-MM-DD HH:mm"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="患者去向" prop="patientDestination" class="grid-item required">
|
||||
<el-select v-model="formData.patientDestination" placeholder="选择去向">
|
||||
<el-option label="ICU" value="ICU" />
|
||||
@@ -177,24 +197,27 @@
|
||||
<!-- 签署区域 -->
|
||||
<section class="doc-section">
|
||||
<h2 class="section-title">五、签署确认</h2>
|
||||
<div class="adaptive-grid signature-area" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));">
|
||||
<div
|
||||
class="adaptive-grid signature-area"
|
||||
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
|
||||
>
|
||||
<el-form-item label="手术者签名" prop="surgeonSignature" class="grid-item required">
|
||||
<el-input v-model="formData.surgeonSignature" placeholder="主刀医师签字" clearable />
|
||||
<div class="signature-tip">请手术者亲笔签名</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="记录者签名" prop="recorderSignature" class="grid-item required">
|
||||
<el-input v-model="formData.recorderSignature" placeholder="记录者签字" clearable />
|
||||
<div class="signature-tip">请记录者(如第一助手)签字</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="记录日期" prop="recordDate" class="grid-item required">
|
||||
<el-date-picker
|
||||
v-model="formData.recordDate"
|
||||
type="date"
|
||||
placeholder="选择记录日期"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 100%;"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -212,12 +235,21 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue';
|
||||
import { ElMessage, ElMessageBox, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElDatePicker, ElButton } from 'element-plus';
|
||||
|
||||
import {
|
||||
ElMessage,
|
||||
ElMessageBox,
|
||||
ElForm,
|
||||
ElFormItem,
|
||||
ElInput,
|
||||
ElSelect,
|
||||
ElOption,
|
||||
ElDatePicker,
|
||||
ElButton,
|
||||
} from 'element-plus';
|
||||
// 医院名称
|
||||
const hospitalName = '长春市朝阳区中医院';
|
||||
defineOptions({
|
||||
name: 'iInHospitalSurgicalRecord'
|
||||
name: 'iInHospitalSurgicalRecord',
|
||||
});
|
||||
// 表单引用
|
||||
const formRef = ref(null);
|
||||
@@ -231,113 +263,93 @@ const formData = reactive({
|
||||
age: '',
|
||||
department: '',
|
||||
bedNo: '',
|
||||
operationDateTime: '',// 手术日期时间
|
||||
|
||||
operationDateTime: '', // 手术日期时间
|
||||
|
||||
// 手术团队信息
|
||||
surgeon: '',// 主刀医师
|
||||
firstAssistant: '',// 第一助手
|
||||
secondAssistant: '',// 第二助手
|
||||
anesthesiologist: '',// 麻醉医师
|
||||
circulatingNurse: '',// 巡回护士
|
||||
scrubNurse: '',// 器械护士
|
||||
|
||||
surgeon: '', // 主刀医师
|
||||
firstAssistant: '', // 第一助手
|
||||
secondAssistant: '', // 第二助手
|
||||
anesthesiologist: '', // 麻醉医师
|
||||
circulatingNurse: '', // 巡回护士
|
||||
scrubNurse: '', // 器械护士
|
||||
|
||||
// 手术详情
|
||||
operationName: '',// 规范手术名称
|
||||
operationMethod: '',// 手术方式
|
||||
surgicalApproach: '',// 手术入路
|
||||
intraoperativeFindings: '',// 术中发现
|
||||
operationProcess: '',// 手术过程
|
||||
|
||||
operationName: '', // 规范手术名称
|
||||
operationMethod: '', // 手术方式
|
||||
surgicalApproach: '', // 手术入路
|
||||
intraoperativeFindings: '', // 术中发现
|
||||
operationProcess: '', // 手术过程
|
||||
|
||||
// 术后情况
|
||||
bloodLoss: '',// 术中出血量
|
||||
bloodTransfusion: '',// 输血情况
|
||||
drainageTube: '',// 引流管放置
|
||||
specimenDisposal: '',// 标本处理
|
||||
operationEndTime: '',// 手术结束时间
|
||||
patientDestination: '',// 患者去向
|
||||
|
||||
bloodLoss: '', // 术中出血量
|
||||
bloodTransfusion: '', // 输血情况
|
||||
drainageTube: '', // 引流管放置
|
||||
specimenDisposal: '', // 标本处理
|
||||
operationEndTime: '', // 手术结束时间
|
||||
patientDestination: '', // 患者去向
|
||||
|
||||
// 签署信息
|
||||
surgeonSignature: '',// 手术者签名
|
||||
recorderSignature: '',// 记录者签名
|
||||
recordDate: ''// 记录日期
|
||||
surgeonSignature: '', // 手术者签名
|
||||
recorderSignature: '', // 记录者签名
|
||||
recordDate: '', // 记录日期
|
||||
});
|
||||
|
||||
// Props与事件
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const patient = props.patientInfo;
|
||||
|
||||
// 表单验证规则
|
||||
const rules = reactive({
|
||||
busNo: [
|
||||
{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
patientName: [
|
||||
{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
gender: [
|
||||
{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }
|
||||
],
|
||||
busNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
|
||||
patientName: [{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }],
|
||||
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
|
||||
age: [
|
||||
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
|
||||
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
department: [
|
||||
{ required: true, message: '请填写科室', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
bedNo: [
|
||||
{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }
|
||||
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
department: [{ required: true, message: '请填写科室', trigger: ['blur', 'submit'] }],
|
||||
bedNo: [{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }],
|
||||
operationDateTime: [
|
||||
{ required: true, message: '请选择手术日期时间', trigger: ['change', 'submit'] }
|
||||
],
|
||||
surgeon: [
|
||||
{ required: true, message: '请填写手术者姓名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
firstAssistant: [
|
||||
{ required: true, message: '请填写第一助手姓名', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请选择手术日期时间', trigger: ['change', 'submit'] },
|
||||
],
|
||||
surgeon: [{ required: true, message: '请填写手术者姓名', trigger: ['blur', 'submit'] }],
|
||||
firstAssistant: [{ required: true, message: '请填写第一助手姓名', trigger: ['blur', 'submit'] }],
|
||||
anesthesiologist: [
|
||||
{ required: true, message: '请填写麻醉医师姓名', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请填写麻醉医师姓名', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
circulatingNurse: [
|
||||
{ required: true, message: '请填写巡回护士姓名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
scrubNurse: [
|
||||
{ required: true, message: '请填写器械护士姓名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
operationName: [
|
||||
{ required: true, message: '请填写手术名称', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
operationMethod: [
|
||||
{ required: true, message: '请选择手术方式', trigger: ['change', 'submit'] }
|
||||
],
|
||||
surgicalApproach: [
|
||||
{ required: true, message: '请填写手术入路', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请填写巡回护士姓名', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
scrubNurse: [{ required: true, message: '请填写器械护士姓名', trigger: ['blur', 'submit'] }],
|
||||
operationName: [{ required: true, message: '请填写手术名称', trigger: ['blur', 'submit'] }],
|
||||
operationMethod: [{ required: true, message: '请选择手术方式', trigger: ['change', 'submit'] }],
|
||||
surgicalApproach: [{ required: true, message: '请填写手术入路', trigger: ['blur', 'submit'] }],
|
||||
intraoperativeFindings: [
|
||||
{ required: true, message: '请描述术中发现', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
operationProcess: [
|
||||
{ required: true, message: '请描述手术过程', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请描述术中发现', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
operationProcess: [{ required: true, message: '请描述手术过程', trigger: ['blur', 'submit'] }],
|
||||
bloodLoss: [
|
||||
{ required: true, message: '请填写术中出血量', trigger: ['blur', 'submit'] },
|
||||
{ type: 'number', min: 0, message: '出血量不能为负数', trigger: ['blur', 'submit'] }
|
||||
{ type: 'number', min: 0, message: '出血量不能为负数', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
specimenDisposal: [
|
||||
{ required: true, message: '请填写标本处理方式', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请填写标本处理方式', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
operationEndTime: [
|
||||
{ required: true, message: '请选择手术结束时间', trigger: ['change', 'submit'] }
|
||||
{ required: true, message: '请选择手术结束时间', trigger: ['change', 'submit'] },
|
||||
],
|
||||
patientDestination: [
|
||||
{ required: true, message: '请选择患者去向', trigger: ['change', 'submit'] }
|
||||
{ required: true, message: '请选择患者去向', trigger: ['change', 'submit'] },
|
||||
],
|
||||
surgeonSignature: [
|
||||
{ required: true, message: '请手术者签名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
recorderSignature: [
|
||||
{ required: true, message: '请记录者签名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
recordDate: [
|
||||
{ required: true, message: '请选择记录日期', trigger: ['change', 'submit'] }
|
||||
]
|
||||
surgeonSignature: [{ required: true, message: '请手术者签名', trigger: ['blur', 'submit'] }],
|
||||
recorderSignature: [{ required: true, message: '请记录者签名', trigger: ['blur', 'submit'] }],
|
||||
recordDate: [{ required: true, message: '请选择记录日期', trigger: ['change', 'submit'] }],
|
||||
});
|
||||
|
||||
// 生命周期
|
||||
@@ -347,18 +359,43 @@ onMounted(() => {
|
||||
formData.operationDateTime = formatDateTime(today);
|
||||
formData.operationEndTime = formatDateTime(today);
|
||||
formData.recordDate = formatDate(today);
|
||||
if (!formData.patientName) {
|
||||
formData.patientName = patient?.patientName || '';
|
||||
}
|
||||
if (!formData.gender) {
|
||||
formData.gender = patient?.genderEnum_enumText || '';
|
||||
}
|
||||
if (!formData.age) {
|
||||
formData.age = patient?.age || '';
|
||||
}
|
||||
if (!formData.department) {
|
||||
formData.department = patient?.inHospitalOrgName || '';
|
||||
}
|
||||
if (!formData.bedNo) {
|
||||
formData.bedNo = patient?.houseName + '-' + patient?.bedName;
|
||||
}
|
||||
});
|
||||
|
||||
const emits = defineEmits(['submitOk']);
|
||||
|
||||
// 提交表单
|
||||
const submit = () => {
|
||||
formRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
ElMessage.success('手术记录保存成功');
|
||||
console.log('手术记录数据:', formData);
|
||||
emits('submitOk', formData);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 表单数据赋值
|
||||
const setFormData = (data) => {
|
||||
if (data) {
|
||||
Object.assign(formData, data);
|
||||
}
|
||||
};
|
||||
|
||||
// 打印功能
|
||||
const handlePrint = () => {
|
||||
formRef.value.validate((valid) => {
|
||||
@@ -372,15 +409,11 @@ const handlePrint = () => {
|
||||
|
||||
// 重置表单
|
||||
const handleReset = () => {
|
||||
ElMessageBox.confirm(
|
||||
'确定要重置表单吗?所有已填写内容将被清空',
|
||||
'确认重置',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}
|
||||
).then(() => {
|
||||
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空', '确认重置', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
formRef.value.resetFields();
|
||||
const today = new Date();
|
||||
formData.operationDateTime = formatDateTime(today);
|
||||
@@ -406,6 +439,7 @@ const formatDateTime = (date) => {
|
||||
const minute = String(date.getMinutes()).padStart(2, '0');
|
||||
return `${year}-${month}-${day} ${hour}:${minute}`;
|
||||
};
|
||||
defineExpose({ submit, setFormData });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -517,15 +551,15 @@ const formatDateTime = (date) => {
|
||||
.medical-document {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
|
||||
.adaptive-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
|
||||
.doc-title {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
|
||||
.section-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -535,21 +569,23 @@ const formatDateTime = (date) => {
|
||||
.btn-group {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.medical-document {
|
||||
box-shadow: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-input__inner, .el-select__input, .el-textarea__inner {
|
||||
|
||||
.el-input__inner,
|
||||
.el-select__input,
|
||||
.el-textarea__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
|
||||
.el-form-item__label {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -22,29 +22,29 @@
|
||||
<el-form-item label="姓名" prop="patientName" class="grid-item required">
|
||||
<el-input v-model="formData.patientName" placeholder="请输入患者姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="性别" prop="gender" class="grid-item required">
|
||||
<el-select v-model="formData.gender" placeholder="请选择性别">
|
||||
<el-option label="男" value="男" />
|
||||
<el-option label="女" value="女" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="年龄" prop="age" class="grid-item required">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model.number="formData.age" type="number" placeholder="请输入年龄" />
|
||||
<el-input v-model.number="formData.age" placeholder="请输入年龄" clearable />
|
||||
<span class="unit">岁</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="科室/病区" prop="department" class="grid-item required">
|
||||
<el-input v-model="formData.department" placeholder="如:内科疗区" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="病房/床号" prop="bedNo" class="grid-item required">
|
||||
<el-input v-model="formData.bedNo" placeholder="如:307-12" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="入院日期" prop="admissionDate" class="grid-item required">
|
||||
<el-date-picker
|
||||
v-model="formData.admissionDate"
|
||||
@@ -63,11 +63,11 @@
|
||||
<el-form-item label="经治医师" prop="treatingDoctor" class="grid-item required">
|
||||
<el-input v-model="formData.treatingDoctor" placeholder="请输入医师姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="主治医师" prop="attendingDoctor" class="grid-item required">
|
||||
<el-input v-model="formData.attendingDoctor" placeholder="请输入医师姓名" clearable />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="科主任" prop="departmentHead" class="grid-item required">
|
||||
<el-input v-model="formData.departmentHead" placeholder="请输入主任姓名" clearable />
|
||||
</el-form-item>
|
||||
@@ -77,7 +77,7 @@
|
||||
<!-- 病情与诊断 -->
|
||||
<section class="doc-section">
|
||||
<h2 class="section-title">三、病情与诊断</h2>
|
||||
|
||||
|
||||
<el-form-item label="病情状况" prop="condition" class="full-width-item required">
|
||||
<el-input
|
||||
v-model="formData.condition"
|
||||
@@ -88,7 +88,7 @@
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<div class="diagnosis-container">
|
||||
<el-form-item label="中医诊断" prop="tcmDiagnosis" class="diagnosis-item">
|
||||
<el-input
|
||||
@@ -100,7 +100,7 @@
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="西医诊断" prop="westernDiagnosis" class="diagnosis-item">
|
||||
<el-input
|
||||
v-model="formData.westernDiagnosis"
|
||||
@@ -117,7 +117,7 @@
|
||||
<!-- 治疗与检查计划 -->
|
||||
<section class="doc-section">
|
||||
<h2 class="section-title">四、治疗与检查计划</h2>
|
||||
|
||||
|
||||
<el-form-item label="治疗方案" prop="treatmentPlan" class="full-width-item required">
|
||||
<el-input
|
||||
v-model="formData.treatmentPlan"
|
||||
@@ -128,8 +128,12 @@
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="进一步检查项目" prop="examinationItems" class="full-width-item required">
|
||||
|
||||
<el-form-item
|
||||
label="进一步检查项目"
|
||||
prop="examinationItems"
|
||||
class="full-width-item required"
|
||||
>
|
||||
<el-input
|
||||
v-model="formData.examinationItems"
|
||||
type="textarea"
|
||||
@@ -159,38 +163,45 @@
|
||||
<!-- 签署区域(优化后:三列自适应+细节样式) -->
|
||||
<section class="doc-section">
|
||||
<h2 class="section-title">六、签署确认</h2>
|
||||
<div class="adaptive-grid signature-area" style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));">
|
||||
<div
|
||||
class="adaptive-grid signature-area"
|
||||
style="grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))"
|
||||
>
|
||||
<el-form-item label="患者或家属签字" prop="patientSignature" class="grid-item required">
|
||||
<el-input v-model="formData.patientSignature" placeholder="请签字" clearable />
|
||||
<div class="signature-tip">请填写患者或家属签字</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="与患者关系" prop="relationship" class="grid-item">
|
||||
<el-input v-model="formData.relationship" placeholder="如:本人、配偶、子女" clearable />
|
||||
<el-input
|
||||
v-model="formData.relationship"
|
||||
placeholder="如:本人、配偶、子女"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="签字日期" prop="signatureDate" class="grid-item required">
|
||||
<el-date-picker
|
||||
v-model="formData.signatureDate"
|
||||
type="date"
|
||||
placeholder="选择签字日期"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 100%;"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="沟通医师签字" prop="doctorSignature" class="grid-item required">
|
||||
<el-input v-model="formData.doctorSignature" placeholder="请签字" clearable />
|
||||
<div class="signature-tip">请填写沟通医师签字</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="沟通日期" prop="communicationDate" class="grid-item required">
|
||||
<el-date-picker
|
||||
v-model="formData.communicationDate"
|
||||
type="datetime"
|
||||
placeholder="选择沟通日期时间"
|
||||
value-format="YYYY-MM-DD HH:mm"
|
||||
style="width: 100%;"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -208,13 +219,53 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue';
|
||||
import { ElMessage, ElMessageBox, ElForm, ElFormItem, ElInput, ElSelect, ElOption, ElDatePicker, ElButton } from 'element-plus';
|
||||
import {
|
||||
ElMessage,
|
||||
ElMessageBox,
|
||||
ElForm,
|
||||
ElFormItem,
|
||||
ElInput,
|
||||
ElSelect,
|
||||
ElOption,
|
||||
ElDatePicker,
|
||||
ElButton,
|
||||
} from 'element-plus';
|
||||
|
||||
// 医院名称
|
||||
const hospitalName = '长春市朝阳区中医院';
|
||||
defineOptions({
|
||||
name: 'InHospitalCommunicate'
|
||||
name: 'InHospitalCommunicate',
|
||||
});
|
||||
// Props与事件
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
// 生命周期
|
||||
onMounted(() => {
|
||||
if (!formData.patientName) {
|
||||
formData.patientName = patient?.patientName || '';
|
||||
}
|
||||
if (!formData.gender) {
|
||||
formData.gender = patient?.genderEnum_enumText || '';
|
||||
}
|
||||
if (!formData.age) {
|
||||
formData.age = patient?.age || '';
|
||||
}
|
||||
if (!formData.hospitalNo) {
|
||||
formData.hospitalNo = patient?.busNo || '';
|
||||
}
|
||||
if (!formData.department) {
|
||||
formData.department = patient?.inHospitalOrgName || '';
|
||||
}
|
||||
if (!formData.bedNo) {
|
||||
formData.bedNo = patient?.houseName + '-' + patient?.bedName;
|
||||
}
|
||||
});
|
||||
const patient = props.patientInfo;
|
||||
console.log('patient1111=======>', JSON.stringify(patient));
|
||||
// 表单引用
|
||||
const formRef = ref(null);
|
||||
|
||||
@@ -228,89 +279,59 @@ const formData = reactive({
|
||||
department: '',
|
||||
bedNo: '',
|
||||
admissionDate: '',
|
||||
|
||||
|
||||
// 医疗团队
|
||||
treatingDoctor: '',
|
||||
attendingDoctor: '',
|
||||
departmentHead: '',
|
||||
|
||||
|
||||
// 病情诊断
|
||||
condition: '',
|
||||
tcmDiagnosis: '',
|
||||
westernDiagnosis: '',
|
||||
|
||||
|
||||
// 治疗检查
|
||||
treatmentPlan: '',
|
||||
examinationItems: '',
|
||||
|
||||
|
||||
// 风险告知
|
||||
riskNotification: '',
|
||||
|
||||
|
||||
// 签署信息
|
||||
patientSignature: '',
|
||||
relationship: '',
|
||||
signatureDate: '',
|
||||
doctorSignature: '',
|
||||
communicationDate: ''
|
||||
communicationDate: '',
|
||||
});
|
||||
|
||||
// 表单验证规则
|
||||
const rules = reactive({
|
||||
hospitalNo: [
|
||||
{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
patientName: [
|
||||
{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
gender: [
|
||||
{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }
|
||||
],
|
||||
hospitalNo: [{ required: true, message: '请填写住院号', trigger: ['blur', 'submit'] }],
|
||||
patientName: [{ required: true, message: '请填写患者姓名', trigger: ['blur', 'submit'] }],
|
||||
gender: [{ required: true, message: '请选择性别', trigger: ['change', 'submit'] }],
|
||||
age: [
|
||||
{ required: true, message: '请填写年龄', trigger: ['blur', 'submit'] },
|
||||
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
department: [
|
||||
{ required: true, message: '请填写科室/病区', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
bedNo: [
|
||||
{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
admissionDate: [
|
||||
{ required: true, message: '请选择入院日期', trigger: ['change', 'submit'] }
|
||||
],
|
||||
treatingDoctor: [
|
||||
{ required: true, message: '请填写经治医师', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
attendingDoctor: [
|
||||
{ required: true, message: '请填写主治医师', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
departmentHead: [
|
||||
{ required: true, message: '请填写科主任', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
condition: [
|
||||
{ required: true, message: '请描述病情状况', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
treatmentPlan: [
|
||||
{ required: true, message: '请填写治疗方案', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
examinationItems: [
|
||||
{ required: true, message: '请填写检查项目', trigger: ['blur', 'submit'] }
|
||||
{ type: 'number', min: 0, max: 150, message: '年龄需在0-150之间', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
department: [{ required: true, message: '请填写科室/病区', trigger: ['blur', 'submit'] }],
|
||||
bedNo: [{ required: true, message: '请填写病房/床号', trigger: ['blur', 'submit'] }],
|
||||
admissionDate: [{ required: true, message: '请选择入院日期', trigger: ['change', 'submit'] }],
|
||||
treatingDoctor: [{ required: true, message: '请填写经治医师', trigger: ['blur', 'submit'] }],
|
||||
attendingDoctor: [{ required: true, message: '请填写主治医师', trigger: ['blur', 'submit'] }],
|
||||
departmentHead: [{ required: true, message: '请填写科主任', trigger: ['blur', 'submit'] }],
|
||||
condition: [{ required: true, message: '请描述病情状况', trigger: ['blur', 'submit'] }],
|
||||
treatmentPlan: [{ required: true, message: '请填写治疗方案', trigger: ['blur', 'submit'] }],
|
||||
examinationItems: [{ required: true, message: '请填写检查项目', trigger: ['blur', 'submit'] }],
|
||||
riskNotification: [
|
||||
{ required: true, message: '请填写风险告知内容', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请填写风险告知内容', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
patientSignature: [
|
||||
{ required: true, message: '请填写患者或家属签字', trigger: ['blur', 'submit'] }
|
||||
{ required: true, message: '请填写患者或家属签字', trigger: ['blur', 'submit'] },
|
||||
],
|
||||
signatureDate: [
|
||||
{ required: true, message: '请选择签字日期', trigger: ['change', 'submit'] }
|
||||
],
|
||||
doctorSignature: [
|
||||
{ required: true, message: '请填写医师签字', trigger: ['blur', 'submit'] }
|
||||
],
|
||||
communicationDate: [
|
||||
{ required: true, message: '请选择沟通日期', trigger: ['change', 'submit'] }
|
||||
]
|
||||
signatureDate: [{ required: true, message: '请选择签字日期', trigger: ['change', 'submit'] }],
|
||||
doctorSignature: [{ required: true, message: '请填写医师签字', trigger: ['blur', 'submit'] }],
|
||||
communicationDate: [{ required: true, message: '请选择沟通日期', trigger: ['change', 'submit'] }],
|
||||
});
|
||||
|
||||
// 生命周期
|
||||
@@ -322,16 +343,26 @@ onMounted(() => {
|
||||
formData.communicationDate = formatDateTime(today);
|
||||
});
|
||||
|
||||
const emits = defineEmits(['submitOk']);
|
||||
|
||||
// 提交表单
|
||||
const submit = () => {
|
||||
formRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
ElMessage.success('记录保存成功');
|
||||
console.log('表单数据:', formData);
|
||||
emits('submitOk', formData);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 表单数据赋值
|
||||
const setFormData = (data) => {
|
||||
if (data) {
|
||||
Object.assign(formData, data);
|
||||
}
|
||||
};
|
||||
|
||||
// 打印功能
|
||||
const handlePrint = () => {
|
||||
formRef.value.validate((valid) => {
|
||||
@@ -345,15 +376,11 @@ const handlePrint = () => {
|
||||
|
||||
// 重置表单
|
||||
const handleReset = () => {
|
||||
ElMessageBox.confirm(
|
||||
'确定要重置表单吗?所有已填写内容将被清空',
|
||||
'确认重置',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}
|
||||
).then(() => {
|
||||
ElMessageBox.confirm('确定要重置表单吗?所有已填写内容将被清空', '确认重置', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
formRef.value.resetFields();
|
||||
const today = new Date();
|
||||
formData.admissionDate = formatDate(today);
|
||||
@@ -379,6 +406,8 @@ const formatDateTime = (date) => {
|
||||
const minute = String(date.getMinutes()).padStart(2, '0');
|
||||
return `${year}-${month}-${day} ${hour}:${minute}`;
|
||||
};
|
||||
|
||||
defineExpose({ submit, setFormData });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -510,19 +539,19 @@ const formatDateTime = (date) => {
|
||||
.medical-document {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
|
||||
.diagnosis-container {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
|
||||
.adaptive-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
|
||||
.doc-title {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
|
||||
.section-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -533,21 +562,23 @@ const formatDateTime = (date) => {
|
||||
.btn-group {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.medical-document {
|
||||
box-shadow: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-input__inner, .el-select__input, .el-textarea__inner {
|
||||
|
||||
.el-input__inner,
|
||||
.el-select__input,
|
||||
.el-textarea__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
|
||||
.el-form-item__label {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2 class="title">乾安县人民医院</h2>
|
||||
<h2 class="title">长春市朝阳区中医院</h2>
|
||||
<h3 class="subtitle">患者护理记录单</h3>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ defineOptions({
|
||||
components: { ElInput, ElMessage, ElForm, ElFormItem },
|
||||
});
|
||||
|
||||
// // Props与事件,去掉props.patientInfo改为直接从store获取
|
||||
// // Props与事件, 去掉props.patientInfo改为直接从store获取
|
||||
// const props = defineProps({
|
||||
// patientInfo: {
|
||||
// type: Object,
|
||||
@@ -206,7 +206,6 @@ const submit = () => {
|
||||
formRef.value.validate((isValid) => {
|
||||
if (isValid) {
|
||||
emits('submitOk', formData);
|
||||
ElMessage.success('提交成功');
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -256,14 +255,15 @@ defineExpose({ formData, submit, setFormData });
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
min-height: 800px;
|
||||
height: 900px;
|
||||
height: auto;
|
||||
margin: 15px auto;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
font-family: Arial, sans-serif;
|
||||
box-sizing: border-box;
|
||||
overflow: visible;
|
||||
overflow: hidden; /* 防止内部内容溢出 */
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 顶部姓名样式 */
|
||||
@@ -278,11 +278,12 @@ defineExpose({ formData, submit, setFormData });
|
||||
/* 滚动内容容器 */
|
||||
.form-scroll-container {
|
||||
width: 100%;
|
||||
max-height: 80vh;
|
||||
max-height: 55vh;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #ccc #f5f5f5;
|
||||
position: relative;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
@@ -298,6 +299,8 @@ defineExpose({ formData, submit, setFormData });
|
||||
/* 完整表单容器 */
|
||||
.medical-full-form {
|
||||
width: 100%;
|
||||
min-width: 0; /* 防止内容强制拉伸容器 */
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 区域通用样式 */
|
||||
@@ -319,6 +322,8 @@ defineExpose({ formData, submit, setFormData });
|
||||
flex-wrap: wrap; /* 自动换行 */
|
||||
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
|
||||
gap: 15px; /* 统一元素间距 */
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.row-item {
|
||||
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
|
||||
@@ -389,9 +394,11 @@ defineExpose({ formData, submit, setFormData });
|
||||
.medical-form {
|
||||
height: 80vh;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.form-scroll-container {
|
||||
height: calc(100% - 35px);
|
||||
max-height: none;
|
||||
}
|
||||
.el-form {
|
||||
label-width: 70px !important;
|
||||
|
||||
455
openhis-ui-vue3/src/template/outpatientMedicalRecord1.1.vue
Normal file
455
openhis-ui-vue3/src/template/outpatientMedicalRecord1.1.vue
Normal file
@@ -0,0 +1,455 @@
|
||||
<template>
|
||||
<div class="medical-form">
|
||||
<div class="patient-name">
|
||||
患者姓名:{{ patient?.patientName || '未知' }} 病历号:{{
|
||||
patient?.busNo || '未知'
|
||||
}}
|
||||
</div>
|
||||
<h2 style="text-align: center">{{ userStore.hospitalName || '长春市朝阳区中医院' }}</h2>
|
||||
|
||||
<h2 style="text-align: center">门诊病历</h2>
|
||||
|
||||
<!-- 滚动内容区域 -->
|
||||
<div class="form-scroll-container">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
label-align="left"
|
||||
class="medical-full-form"
|
||||
>
|
||||
<h4 class="section-title">基础信息</h4>
|
||||
<!-- 1. 基础信息:单行自适应排列 -->
|
||||
<el-form-item class="form-section">
|
||||
<div class="single-row-layout">
|
||||
<el-form-item label="呼吸" prop="breathe" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.breathe" type="text" placeholder="请输入" />
|
||||
<span class="unit">次/分</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="血压" prop="blood" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.blood" type="text" placeholder="请输入" />
|
||||
<span class="unit">mmHg</span>
|
||||
</div>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="血压" prop="blood" class="row-item">
|
||||
<div class="input-with-unit blood-input-group">
|
||||
<el-input
|
||||
v-model="formData.bloodHigh"
|
||||
type="text"
|
||||
placeholder="高压"
|
||||
style="width: 80px"
|
||||
/>
|
||||
<span class="divider">/</span>
|
||||
<el-input
|
||||
v-model="formData.bloodLow"
|
||||
type="text"
|
||||
placeholder="低压"
|
||||
style="width: 80px"
|
||||
/>
|
||||
<span class="unit">(高/低)mmHg</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="体温" prop="temperature" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.temperature" type="text" placeholder="请输入" />
|
||||
<span class="unit">℃</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="脉搏" prop="pulse" class="row-item">
|
||||
<div class="input-with-unit">
|
||||
<el-input v-model="formData.pulse" type="text" placeholder="请输入" />
|
||||
<span class="unit">次/分</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="就诊日期" prop="onsetDate" class="row-item">
|
||||
<el-date-picker
|
||||
v-model="formData.onsetDate"
|
||||
type="date"
|
||||
placeholder="选择就诊日期"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 100%"
|
||||
/>
|
||||
<!-- <el-input v-model="formData.onsetDate" type="date" /> -->
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<h4 class="section-title">病史信息</h4>
|
||||
<!-- 2. 病史信息:单行自适应排列(新增调整) -->
|
||||
<el-form-item class="form-section">
|
||||
<div class="single-row-layout">
|
||||
<el-form-item label="现病史" prop="presentIllness" class="row-item history-item">
|
||||
<el-input
|
||||
v-model="formData.presentIllness"
|
||||
type="textarea"
|
||||
placeholder="无"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="既往史" prop="pastIllness" class="row-item history-item">
|
||||
<el-input v-model="formData.pastIllness" type="textarea" placeholder="无" autosize />
|
||||
</el-form-item>
|
||||
<el-form-item label="个人史" prop="personalHistory" class="row-item history-item">
|
||||
<el-input
|
||||
v-model="formData.personalHistory"
|
||||
type="textarea"
|
||||
placeholder="无"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="过敏史" prop="allergyHistory" class="row-item history-item">
|
||||
<el-input
|
||||
v-model="formData.allergyHistory"
|
||||
type="textarea"
|
||||
placeholder="无"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="家族史" prop="familyHistory" class="row-item history-item">
|
||||
<el-input
|
||||
v-model="formData.familyHistory"
|
||||
type="textarea"
|
||||
placeholder="无"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<h4 class="section-title">主诉、处置、辅助检查</h4>
|
||||
<!-- 3. 主诉(必填) -->
|
||||
<el-form-item label="主诉" prop="complaint" class="required form-item-single">
|
||||
<el-input
|
||||
v-model="formData.complaint"
|
||||
type="textarea"
|
||||
placeholder="请输入主诉"
|
||||
class="tall-textarea"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 4. 查体、处理、辅助检查 -->
|
||||
<!-- <el-form-item label="查体(治疗)" prop="physicalExam" class="form-item-single">
|
||||
<el-input
|
||||
v-model="formData.physicalExam"
|
||||
type="textarea"
|
||||
placeholder="请输入查体结果"
|
||||
class="tall-textarea"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item> -->
|
||||
|
||||
<el-form-item label="处置" prop="treatment" class="form-item-single">
|
||||
<el-input
|
||||
v-model="formData.treatment"
|
||||
type="textarea"
|
||||
placeholder="请输入处理方案"
|
||||
class="tall-textarea"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="辅助检查" prop="auxiliaryExam" class="form-item-single">
|
||||
<el-input
|
||||
v-model="formData.auxiliaryExam"
|
||||
type="textarea"
|
||||
placeholder="请输入辅助检查结果"
|
||||
class="tall-textarea"
|
||||
autosize
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, onBeforeMount, onMounted, watch } from 'vue';
|
||||
import useUserStore from '../store/modules/user';
|
||||
import { ElInput, ElMessage, ElForm, ElFormItem } from 'element-plus';
|
||||
import { patientInfo } from '../views/doctorstation/components/store/patient';
|
||||
import { pa } from 'element-plus/es/locales.mjs';
|
||||
|
||||
defineOptions({
|
||||
name: 'OutpatientMedicalRecord1.1',
|
||||
components: { ElInput, ElMessage, ElForm, ElFormItem },
|
||||
});
|
||||
|
||||
// // Props与事件,去掉props.patientInfo改为直接从store获取
|
||||
// const props = defineProps({
|
||||
// patientInfo: {
|
||||
// type: Object,
|
||||
// required: true,
|
||||
// },
|
||||
// });
|
||||
const props = defineProps({});
|
||||
const emits = defineEmits(['submitOk']);
|
||||
|
||||
// 数据初始化
|
||||
const userStore = useUserStore();
|
||||
const patient = ref(null);
|
||||
const formRef = ref(null);
|
||||
|
||||
// 表单数据(全部字符类型)
|
||||
const formData = reactive({
|
||||
breathe: '', // 呼吸
|
||||
bloodHigh: '', //高压
|
||||
bloodLow: '', //低压
|
||||
temperature: '', // 体温
|
||||
pulse: '', // 脉搏
|
||||
onsetDate: '', // 就诊日期
|
||||
complaint: '', // 主诉(必填)
|
||||
presentIllness: '', // 现病史
|
||||
pastIllness: '', // 既往史
|
||||
personalHistory: '', // 个人史
|
||||
allergyHistory: '', // 过敏史
|
||||
physicalExam: '', // 查体
|
||||
treatment: '', // 处理
|
||||
auxiliaryExam: '', // 辅助检查
|
||||
familyHistory: '', // 家族史
|
||||
});
|
||||
|
||||
// 表单校验规则
|
||||
const rules = reactive({
|
||||
complaint: [
|
||||
{
|
||||
required: true,
|
||||
message: '请填写主诉',
|
||||
trigger: ['blur', 'submit'],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// 提交函数
|
||||
const submit = () => {
|
||||
formRef.value.validate((isValid) => {
|
||||
if (isValid) {
|
||||
emits('submitOk', formData);
|
||||
}
|
||||
});
|
||||
};
|
||||
// 日期格式化工具
|
||||
const formatDateTime = (date) => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hour = String(date.getHours()).padStart(2, '0');
|
||||
const minute = String(date.getMinutes()).padStart(2, '0');
|
||||
return `${year}-${month}-${day} ${hour}:${minute}`;
|
||||
};
|
||||
// 表单数据赋值
|
||||
const setFormData = (data) => {
|
||||
if (data) {
|
||||
Object.assign(formData, data);
|
||||
}
|
||||
};
|
||||
|
||||
// 生命周期
|
||||
onBeforeMount(() => {});
|
||||
onMounted(() => {
|
||||
console.log('当前患者信息:', patientInfo);
|
||||
patient.value = patientInfo.value;
|
||||
// 初始化发病日期为当前时间
|
||||
if (!formData.onsetDate) {
|
||||
formData.onsetDate = formatDateTime(new Date());
|
||||
}
|
||||
});
|
||||
|
||||
// 监听患者信息变化,实现联动显示
|
||||
watch(
|
||||
() => patientInfo.value,
|
||||
(newPatientInfo) => {
|
||||
patient.value = newPatientInfo;
|
||||
},
|
||||
{ deep: true }
|
||||
);
|
||||
|
||||
// 暴露接口
|
||||
defineExpose({ formData, submit, setFormData });
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 表单外层容器 */
|
||||
.medical-form {
|
||||
max-width: 1200px;
|
||||
width: 100%;
|
||||
min-height: 800px;
|
||||
height: 900px;
|
||||
margin: 15px auto;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8px;
|
||||
font-family: Arial, sans-serif;
|
||||
box-sizing: border-box;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/* 顶部姓名样式 */
|
||||
.patient-name {
|
||||
display: inline-block;
|
||||
margin-bottom: 15px;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 滚动内容容器 */
|
||||
.form-scroll-container {
|
||||
width: 100%;
|
||||
max-height: 80vh;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #ccc #f5f5f5;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar-thumb {
|
||||
background-color: #ccc;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.form-scroll-container::-webkit-scrollbar-track {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
/* 完整表单容器 */
|
||||
.medical-full-form {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 区域通用样式 */
|
||||
.form-section {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.section-title {
|
||||
margin: 0 0 12px;
|
||||
padding-bottom: 6px;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 通用单行自适应布局(基础信息+病史信息共用) */
|
||||
.single-row-layout {
|
||||
display: flex;
|
||||
flex-wrap: wrap; /* 自动换行 */
|
||||
align-items: flex-start; /* 顶部对齐,适配文本域高度 */
|
||||
gap: 15px; /* 统一元素间距 */
|
||||
}
|
||||
.row-item {
|
||||
margin-bottom: 0; /* 取消底部间距,避免换行重叠 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.blood-input-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.blood-input-group .el-input {
|
||||
flex: none;
|
||||
}
|
||||
|
||||
.divider {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.unit {
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
white-space: nowrap;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 基础信息项:适配短输入框 */
|
||||
.row-item:not(.history-item) {
|
||||
min-width: 160px; /* 基础信息项最小宽度 */
|
||||
}
|
||||
|
||||
/* 病史信息项:适配文本域,设置更大最小宽度 */
|
||||
.history-item {
|
||||
min-width: 220px; /* 确保文本域有足够宽度 */
|
||||
}
|
||||
|
||||
/* 带单位的输入框样式 */
|
||||
.input-with-unit {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
.input-with-unit .el-input {
|
||||
flex: 1;
|
||||
}
|
||||
.unit {
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
white-space: nowrap;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* 单行表单项样式(主诉、查体等) */
|
||||
.form-item-single {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
/* 文本域高度控制 */
|
||||
.tall-textarea {
|
||||
--el-input-textarea-min-height: 100px;
|
||||
}
|
||||
/* 病史信息文本域:适当降低高度,适配单行布局 */
|
||||
.history-item .el-input__inner {
|
||||
--el-input-textarea-min-height: 60px;
|
||||
}
|
||||
|
||||
/* 必填项红色星号 */
|
||||
.required .el-form-item__label::before {
|
||||
content: '* ';
|
||||
color: #ff4d4f;
|
||||
}
|
||||
|
||||
/* 输入框统一样式 */
|
||||
.el-form-item .el-input,
|
||||
.el-form-item .el-input__wrapper {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.el-form-item .el-input__inner {
|
||||
font-size: 14px;
|
||||
padding: 8px 12px;
|
||||
}
|
||||
|
||||
/* 响应式调整 */
|
||||
@media (max-width: 768px) {
|
||||
.medical-form {
|
||||
height: 80vh;
|
||||
padding: 10px;
|
||||
}
|
||||
.form-scroll-container {
|
||||
height: calc(100% - 35px);
|
||||
}
|
||||
.el-form {
|
||||
label-width: 70px !important;
|
||||
}
|
||||
.row-item:not(.history-item) {
|
||||
min-width: 130px;
|
||||
}
|
||||
.history-item {
|
||||
min-width: 100%; /* 移动端病史信息全屏宽度,单行显示 */
|
||||
}
|
||||
.form-item-single,
|
||||
.form-section {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.tall-textarea {
|
||||
--el-input-textarea-min-height: 80px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="surgicalPatientHandover-container">
|
||||
<div class="handover-form">
|
||||
<div class="form-header">
|
||||
<h1 class="hospital-name">**医院</h1>
|
||||
<h1 class="hospital-name">长春市朝阳区中医院</h1>
|
||||
<h2 class="form-title">手术患者交接单</h2>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -501,4 +501,33 @@ export function getGroupMarkers(tableData) {
|
||||
}
|
||||
});
|
||||
return tableData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化库存数量显示(大单位情况) 示例 1盒5片
|
||||
* @param quantity 小单位库存数量
|
||||
* @param partPercent 拆零比
|
||||
* @param unitCode 大单位label
|
||||
* @param minUnitCode 小单位label
|
||||
*/
|
||||
export function formatInventory(quantity, partPercent, unitCode, minUnitCode) {
|
||||
// 处理负数情况
|
||||
const isNegative = quantity < 0;
|
||||
const absQuantity = Math.abs(quantity);
|
||||
|
||||
if (absQuantity % partPercent !== 0) {
|
||||
const integerPart = Math.floor(absQuantity / partPercent);
|
||||
const decimalPart = absQuantity % partPercent;
|
||||
|
||||
let result = integerPart.toString() + ' ' + unitCode;
|
||||
if (decimalPart > 0) {
|
||||
result += decimalPart.toString() + ' ' + minUnitCode;
|
||||
}
|
||||
|
||||
return isNegative ? '-' + result : result;
|
||||
}
|
||||
|
||||
// 整除情况
|
||||
const result = absQuantity / partPercent;
|
||||
return isNegative ? '-' + result : result + ' ' + unitCode;
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
* 集中管理所有打印相关功能
|
||||
*/
|
||||
|
||||
// 打印模板映射表
|
||||
// 打印模板映射表 .
|
||||
const TEMPLATE_MAP = {
|
||||
// CLINIC_CHARGE: () => import('@/views/charge/cliniccharge/components/template.json'),
|
||||
// DISPOSAL: () => import('@/views/clinicmanagement/disposal/components/disposalTemplate.json'),
|
||||
@@ -21,6 +21,25 @@ const TEMPLATE_MAP = {
|
||||
OUTPATIENT_REGISTRATION: () => import('@/components/Print/OutpatientRegistration.json'),
|
||||
//门诊收费
|
||||
OUTPATIENT_CHARGE: () => import('@/components/Print/OutpatientBilling.json'),
|
||||
//门诊病历
|
||||
OUTPATIENT_MEDICAL_RECORD: () => import('@/components/Print/OutpatientMedicalRecord.json'),
|
||||
//门诊输液贴
|
||||
OUTPATIENT_INFUSION: () => import('@/components/Print/OutpatientInfusion.json'),
|
||||
//手术记录
|
||||
OPERATIVE_RECORD: () => import('@/components/Print/OperativeRecord.json'),
|
||||
|
||||
//红旗门诊病历
|
||||
HQOUTPATIENT_MEDICAL_RECORD: () => import('@/components/Print/HQOutpatientMedicalRecord.json'),
|
||||
//预交金
|
||||
ADVANCE_PAYMENT: () => import('@/components/Print/AdvancePayment.json'),
|
||||
//中药处方单
|
||||
CHINESE_MEDICINE_PRESCRIPTION: () =>
|
||||
import('@/components/Print/ChineseMedicinePrescription.json'),
|
||||
//药房处方单
|
||||
PHARMACY_PRESCRIPTION: () => import('@/components/Print/Pharmacy.json'),
|
||||
//中药医生处方单
|
||||
DOC_CHINESE_MEDICINE_PRESCRIPTION: () =>
|
||||
import('@/components/Print/DocChineseMedicinePrescription.json'),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -108,6 +127,22 @@ export const PRINT_TEMPLATE = {
|
||||
PRESCRIPTION: 'PRESCRIPTION',
|
||||
//处置单
|
||||
DISPOSAL: 'DISPOSAL',
|
||||
//门诊病历
|
||||
OUTPATIENT_MEDICAL_RECORD: 'OUTPATIENT_MEDICAL_RECORD',
|
||||
//门诊输液贴
|
||||
OUTPATIENT_INFUSION: 'OUTPATIENT_INFUSION',
|
||||
//手术记录
|
||||
OPERATIVE_RECORD: 'OPERATIVE_RECORD',
|
||||
//红旗门诊病历
|
||||
HQOUTPATIENT_MEDICAL_RECORD: 'HQOUTPATIENT_MEDICAL_RECORD',
|
||||
//预交金
|
||||
ADVANCE_PAYMENT: 'ADVANCE_PAYMENT',
|
||||
//中药处方单
|
||||
CHINESE_MEDICINE_PRESCRIPTION: 'CHINESE_MEDICINE_PRESCRIPTION',
|
||||
//药房处方单
|
||||
PHARMACY_PRESCRIPTION: 'PHARMACY_PRESCRIPTION',
|
||||
//中药医生处方单
|
||||
DOC_CHINESE_MEDICINE_PRESCRIPTION: 'DOC_CHINESE_MEDICINE_PRESCRIPTION',
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="属性代码" prop="code">
|
||||
<el-input v-model="form.code" placeholder="请输入属性代码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="体温单类型编码" prop="typeCode">
|
||||
<el-input v-model="form.typeCode" placeholder="请输入体温单属性编码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位顺序" prop="displayOrder">
|
||||
<el-input-number v-model="form.displayOrder" controls-position="right" :min="0" />
|
||||
@@ -197,6 +200,7 @@ function reset() {
|
||||
displayOrder: 0, // 显示顺序
|
||||
dictName: '', //字典名称
|
||||
dictType: '', //字典类型
|
||||
typeCode:'',//体温单类型编码
|
||||
};
|
||||
proxy.resetForm('statisticsRef');
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
>
|
||||
<!-- <el-table-column type="selection" width="50" align="center" /> -->
|
||||
<el-table-column
|
||||
label="取药科室"
|
||||
label="开立科室"
|
||||
align="center"
|
||||
key="name"
|
||||
prop="name"
|
||||
@@ -64,6 +64,29 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="项目类型"
|
||||
align="center"
|
||||
key="itemCode"
|
||||
prop="itemCode"
|
||||
:show-overflow-tooltip="true"
|
||||
width="300"
|
||||
>
|
||||
<template #default="scope">
|
||||
<div style="display: flex; align-items: center; justify-content: center">
|
||||
<el-select
|
||||
v-model="scope.row.itemCode"
|
||||
placeholder="项目类型"
|
||||
clearable
|
||||
style="width: 100px"
|
||||
:class="{ 'error-border': scope.row.error }"
|
||||
>
|
||||
<el-option label="药品" value="1" />
|
||||
<el-option label="耗材" value="2" />
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="药品类别"
|
||||
align="center"
|
||||
@@ -81,12 +104,22 @@
|
||||
style="width: 200px"
|
||||
:class="{ 'error-border': scope.row.error }"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in distribution_category_code"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
<template v-if="scope.row.itemCode == '1'">
|
||||
<el-option
|
||||
v-for="dict in med_category_code"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</template>
|
||||
<template v-if="scope.row.itemCode == '2'">
|
||||
<el-option
|
||||
v-for="dict in device_category_code"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</template>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
@@ -184,7 +217,11 @@ import {
|
||||
deletePharmacyDepartment,
|
||||
} from './components/pharmacyDepartment';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { distribution_category_code } = proxy.useDict('distribution_category_code');
|
||||
const { distribution_category_code, med_category_code, device_category_code } = proxy.useDict(
|
||||
'distribution_category_code',
|
||||
'med_category_code',
|
||||
'device_category_code'
|
||||
);
|
||||
import { nextTick } from 'vue';
|
||||
|
||||
const diagnosisTreatmentList = ref([]);
|
||||
@@ -293,10 +330,6 @@ function handleSelectionChange(selection) {
|
||||
}
|
||||
|
||||
function openAddPharmacyDepartment() {
|
||||
if (data.isAdding) {
|
||||
proxy.$message.warning('请先保存当前行后再新增!');
|
||||
return;
|
||||
}
|
||||
const newRow = {
|
||||
id: '',
|
||||
organizationId: '',
|
||||
|
||||
@@ -36,7 +36,8 @@ export function updateWarehouse(data) {
|
||||
// 删除
|
||||
export function deleteWarehouse(data) {
|
||||
return request({
|
||||
url: '/base-data-manage/location/location?locationId=' + data.locationId,
|
||||
// url: '/base-data-manage/location/location?locationId=' + data.locationId,
|
||||
url: '/base-data-manage/location/location?busNo=' + data.busNo,
|
||||
method: 'delete',
|
||||
})
|
||||
}
|
||||
|
||||
@@ -295,7 +295,8 @@ function submitForm() {
|
||||
// 删除
|
||||
function handelDelete(data) {
|
||||
loading.value = true;
|
||||
deleteWarehouse({ locationId: data.id }).then((res) => {
|
||||
console.log(data, 'data');
|
||||
deleteWarehouse({ busNo: data.busNo }).then((res) => {
|
||||
proxy.$modal.msgSuccess('操作成功');
|
||||
loading.value = false;
|
||||
getPageList();
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
@click="
|
||||
() => {
|
||||
form.ybNo = item.ybNo;
|
||||
form.busNo = item.busNo;
|
||||
form.price = item.retailPrice;
|
||||
}
|
||||
"
|
||||
@@ -679,6 +680,7 @@ const transformFormData = (form) => {
|
||||
ybNo,
|
||||
title,
|
||||
comment,
|
||||
busNo,
|
||||
} = form.value;
|
||||
|
||||
return {
|
||||
@@ -696,6 +698,7 @@ const transformFormData = (form) => {
|
||||
appointmentRequiredFlag,
|
||||
extraDetails,
|
||||
comment,
|
||||
busNo,
|
||||
},
|
||||
chargeItemDefinitionFormData: {
|
||||
id,
|
||||
@@ -734,6 +737,7 @@ const transformFormEditData = (form) => {
|
||||
ybNo,
|
||||
title,
|
||||
comment,
|
||||
busNo,
|
||||
} = form.value;
|
||||
|
||||
return {
|
||||
@@ -751,6 +755,7 @@ const transformFormEditData = (form) => {
|
||||
appointmentRequiredFlag,
|
||||
extraDetails,
|
||||
comment,
|
||||
busNo,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
clearable
|
||||
filterable
|
||||
style="width: 240px"
|
||||
:disabled="form.isEditInfoDisable === 1"
|
||||
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in med_chrgitm_type"
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
key="busNo"
|
||||
prop="busNo"
|
||||
:show-overflow-tooltip="true"
|
||||
width="200"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
label="器材名称"
|
||||
@@ -119,7 +119,15 @@
|
||||
key="name"
|
||||
prop="name"
|
||||
:show-overflow-tooltip="true"
|
||||
width="200"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="包装规格"
|
||||
align="center"
|
||||
key="size"
|
||||
prop="size"
|
||||
width="100"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<!-- <el-table-column
|
||||
label="拼音"
|
||||
@@ -152,14 +160,6 @@
|
||||
:show-overflow-tooltip="true"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
label="包装规格"
|
||||
align="center"
|
||||
key="size"
|
||||
prop="size"
|
||||
width="200"
|
||||
:show-overflow-tooltip="true"
|
||||
/>
|
||||
<el-table-column
|
||||
label="拆零比"
|
||||
align="center"
|
||||
@@ -182,7 +182,7 @@
|
||||
key="minUnitCode_dictText"
|
||||
prop="minUnitCode_dictText"
|
||||
:show-overflow-tooltip="true"
|
||||
width="120"
|
||||
width="100"
|
||||
/>
|
||||
<!-- <el-table-column
|
||||
label="所属科室"
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
clearable
|
||||
filterable
|
||||
style="width: 240px"
|
||||
:disabled="form.isEditInfoDisable === 1"
|
||||
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in med_chrgitm_type"
|
||||
@@ -201,12 +201,9 @@
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="财务类型" prop="itemTypeCode">
|
||||
<el-select
|
||||
v-model="form.itemTypeCode"
|
||||
clearable
|
||||
filterable
|
||||
:disabled="form.isEditInfoDisable === 1"
|
||||
>
|
||||
<el-select v-model="form.itemTypeCode" clearable filterable>
|
||||
<!-- :disabled="form.isEditInfoDisable === 1" -->
|
||||
|
||||
<el-option
|
||||
v-for="category in fin_type_code"
|
||||
:key="category.value"
|
||||
@@ -248,8 +245,13 @@
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="诊疗子项">
|
||||
<div v-if="form.isEditInfoDisable === 0" style="position: relative">
|
||||
<PopoverList @search="handleSearch" :width="1000" :modelValue="item.name">
|
||||
<div style="position: relative">
|
||||
<PopoverList
|
||||
@search="handleSearch"
|
||||
:width="1000"
|
||||
:modelValue="item.name"
|
||||
@focus="popoverListhandleFocus(item.name)"
|
||||
>
|
||||
<template #popover-content="{}">
|
||||
<medicineList
|
||||
@selectRow="(row) => selectRow(row, index)"
|
||||
@@ -275,7 +277,7 @@
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<span v-else>{{ item.name || '' }}</span>
|
||||
<!-- <span v-else>{{ item.name || '' }}</span> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@@ -364,6 +366,7 @@ const { unit_code, med_chrgitm_type, fin_type_code, activity_category_code, chrg
|
||||
'chrgitm_lv'
|
||||
);
|
||||
|
||||
const isTemplateActive = ref(true);
|
||||
const title = ref('');
|
||||
const visible = ref(false);
|
||||
const emits = defineEmits(['submit']); // 声明自定义事件
|
||||
@@ -420,6 +423,10 @@ const props = defineProps({
|
||||
type: Object,
|
||||
required: false,
|
||||
},
|
||||
isEditInfoDisable: {
|
||||
type: Number,
|
||||
required: false,
|
||||
},
|
||||
});
|
||||
|
||||
// 表单数组,初始一条记录
|
||||
@@ -484,6 +491,7 @@ function show() {
|
||||
exeOrganizations.value = props.exeOrganizations;
|
||||
typeEnumOptions.value = props.typeEnumOptions;
|
||||
form.value.categoryCode = props.currentCategoryEnum;
|
||||
form.value.isEditInfoDisable = props.isEditInfoDisable;
|
||||
visible.value = true;
|
||||
}
|
||||
|
||||
@@ -638,10 +646,20 @@ function handleSearch(value) {
|
||||
medicineSearchKey.value = value;
|
||||
}
|
||||
|
||||
function popoverListhandleFocus(value) {
|
||||
// debugger;
|
||||
console.log(value);
|
||||
if (value === '') {
|
||||
return;
|
||||
}
|
||||
medicineSearchKey.value = value;
|
||||
}
|
||||
|
||||
function selectRow(row, index) {
|
||||
treatmentItems.value[index].name = row.name;
|
||||
treatmentItems.value[index].adviceDefinitionId = row.id;
|
||||
treatmentItems.value[index].retailPrice = row.retailPrice || 0;
|
||||
medicineSearchKey.value = '';
|
||||
calculateTotalPrice();
|
||||
}
|
||||
|
||||
|
||||
@@ -217,6 +217,7 @@
|
||||
:statusFlagOptions="statusFlagOptions"
|
||||
:exeOrganizations="exeOrganizations"
|
||||
:typeEnumOptions="typeEnumOptions"
|
||||
:isEditInfoDisable="isEditInfoDisable"
|
||||
:title="title"
|
||||
:item="currentData"
|
||||
@submit="getList()"
|
||||
|
||||
@@ -114,11 +114,7 @@
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="规格" prop="totalVolume">
|
||||
<el-input
|
||||
v-model="form.totalVolume"
|
||||
placeholder=""
|
||||
clearable
|
||||
/>
|
||||
<el-input v-model="form.totalVolume" placeholder="" clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
@@ -453,7 +449,7 @@
|
||||
clearable
|
||||
filterable
|
||||
style="width: 240px"
|
||||
:disabled="form.isEditInfoDisable === 1"
|
||||
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in med_chrgitm_type"
|
||||
@@ -970,7 +966,6 @@ function reset() {
|
||||
}
|
||||
/** 提交按钮 */
|
||||
function submitForm() {
|
||||
|
||||
form.value.activeFlag == true ? (form.value.activeFlag = 1) : (form.value.activeFlag = 0); //是否为活性
|
||||
form.value.ybMatchFlag == true ? (form.value.ybMatchFlag = 1) : (form.value.ybMatchFlag = 0); //医保是否对码
|
||||
form.value.skinTestFlag == true ? (form.value.skinTestFlag = 1) : (form.value.skinTestFlag = 0); //是否皮试
|
||||
|
||||
@@ -155,6 +155,8 @@
|
||||
:show-overflow-tooltip="true"
|
||||
min-width="110"
|
||||
width="200px"
|
||||
sortable
|
||||
:sort-by="(row) => getPinyinFirstLetter(row)"
|
||||
/>
|
||||
<el-table-column
|
||||
label="规格"
|
||||
@@ -588,6 +590,13 @@ function submitForm(formData) {
|
||||
|
||||
getMedicationCategoryList();
|
||||
getList();
|
||||
|
||||
// 药品名称按照第一个汉字首字母排序
|
||||
function getPinyinFirstLetter(row){
|
||||
const firstChar = row.merchandisePyStr.charAt(0);
|
||||
return firstChar.toUpperCase();
|
||||
};
|
||||
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-form--inline .el-form-item {
|
||||
|
||||
@@ -129,4 +129,25 @@ export function getChargeInfo(param) {
|
||||
method: 'get',
|
||||
params: param
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付
|
||||
*/
|
||||
export function wxPay (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/pay-for',
|
||||
method: 'post',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付
|
||||
*/
|
||||
export function WxPayResult (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/pay-query'+data.paymentId,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
@@ -35,14 +35,14 @@
|
||||
v-model="item.payEnum"
|
||||
placeholder="选择支付方式"
|
||||
style="width: 160px"
|
||||
@change="clearAmount(index)"
|
||||
@change="(value) => clearAmount(index, value)"
|
||||
>
|
||||
<el-option
|
||||
v-for="payEnum in selfPayMethods"
|
||||
:key="payEnum.value"
|
||||
:label="payEnum.label"
|
||||
:value="payEnum.value"
|
||||
:disabled="isMethodDisabled(payEnum.value)"
|
||||
:disabled="isMethodDisabled(payEnum)"
|
||||
/>
|
||||
</el-select>
|
||||
<span>支付金额:</span>
|
||||
@@ -94,6 +94,17 @@
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<div class="payment-item">
|
||||
<span>{{ payTypeText }}支付:</span>
|
||||
<el-input
|
||||
ref="txtCodeRef"
|
||||
v-model="txtCode"
|
||||
style="width: 300px"
|
||||
:placeholder="payTypePlaceholder"
|
||||
/>
|
||||
<el-button link type="primary" @click="handleWxPay()">扫码支付</el-button>
|
||||
<el-button link type="primary" @click="getWxPayResult()">查看结果</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<el-table :data="props.details" max-height="200" border>
|
||||
<el-table-column prop="payEnumText" label="支付类型" align="center" />
|
||||
@@ -137,13 +148,22 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { savePayment, unprecharge, dispenseMedicalConsumables, getChargeInfo } from './api';
|
||||
import {
|
||||
savePayment,
|
||||
unprecharge,
|
||||
dispenseMedicalConsumables,
|
||||
wxPay,
|
||||
WxPayResult,
|
||||
getChargeInfo,
|
||||
} from './api';
|
||||
import { computed, watch, reactive, ref, getCurrentInstance, nextTick } from 'vue';
|
||||
import { Delete } from '@element-plus/icons-vue';
|
||||
import { debounce } from 'lodash-es';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import { hiprint } from 'vue-plugin-hiprint';
|
||||
import templateJson from './template.json';
|
||||
import { pa } from 'element-plus/es/locales.mjs';
|
||||
import printUtils, { PRINT_TEMPLATE } from '@/utils/printUtils';
|
||||
|
||||
const props = defineProps({
|
||||
open: {
|
||||
@@ -168,34 +188,37 @@ const props = defineProps({
|
||||
default: undefined,
|
||||
},
|
||||
chargeItemIds: {
|
||||
type: [],
|
||||
default: [],
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
consumablesIdList: {
|
||||
type: [],
|
||||
default: [],
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
chrgBchnoList: {
|
||||
type: [],
|
||||
default: [],
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
|
||||
details: {
|
||||
type: Object,
|
||||
default: undefined,
|
||||
},
|
||||
chargedItems: {
|
||||
type: [],
|
||||
default: [],
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const { charge_discount } = proxy.useDict('charge_discount');
|
||||
// 单位字典
|
||||
const { unit_code } = proxy.useDict('unit_code');
|
||||
|
||||
const userStore = useUserStore();
|
||||
const discountRadio = ref(undefined);
|
||||
const discountRadio = ref();
|
||||
const discountAmount = ref(0);
|
||||
const txtCode = ref('');
|
||||
|
||||
const formData = reactive({
|
||||
totalAmount: 0,
|
||||
@@ -211,6 +234,7 @@ const dialogLoading = ref(false);
|
||||
watch(
|
||||
() => props.totalAmount,
|
||||
(newValue) => {
|
||||
nextTick(() => {});
|
||||
formData.totalAmount = newValue;
|
||||
formData.selfPay[0].amount = newValue;
|
||||
}
|
||||
@@ -219,121 +243,363 @@ watch(
|
||||
const emit = defineEmits(['close']);
|
||||
let displayAmountTemp = 0;
|
||||
|
||||
// 打印小票
|
||||
function printReceipt(param) {
|
||||
let total = 0;
|
||||
props.chargedItems.forEach((item) => {
|
||||
total += item.totalPrice || 0;
|
||||
});
|
||||
// 构造一个新的对象,添加头 "data"
|
||||
const result = {
|
||||
data: [
|
||||
{
|
||||
...param,
|
||||
// 基础支付类型
|
||||
YB_FUND_PAY:
|
||||
param.detail?.find((t) => t.payEnum === 100000)?.amount.toFixed(2) + ' 元' ?? 0, // 基金支付总额
|
||||
SELF_PAY: param.detail?.find((t) => t.payEnum === 200000)?.amount.toFixed(2) + ' 元' ?? 0, // 个人负担总金额
|
||||
OTHER_PAY: param.detail?.find((t) => t.payEnum === 300000)?.amount ?? 0, // 其他(如医院负担金额)
|
||||
// 获取单位字典数据的方法
|
||||
const getUnitLabel = (unitCode) => {
|
||||
if (!unitCode) return '';
|
||||
|
||||
// 基本医保统筹基金支出
|
||||
YB_TC_FUND_AMOUNT:
|
||||
param.detail?.find((t) => t.payEnum === 110000)?.amount.toFixed(2) + ' 元' ?? 0, // 基本医保统筹基金支出
|
||||
YB_BC_FUND_AMOUNT:
|
||||
param.detail?.find((t) => t.payEnum === 120000)?.amount.toFixed(2) + ' 元' ?? 0, // 补充医疗保险基金支出
|
||||
YB_JZ_FUND_AMOUNT:
|
||||
param.detail?.find((t) => t.payEnum === 130000)?.amount.toFixed(2) + ' 元' ?? 0, // 医疗救助基金支出
|
||||
// YB_OTHER_AMOUNT: param.detail.find((t) => t.payEnum === 140000)?.amount ?? 0, // 其他支出
|
||||
// 从已加载的 unit_code 字典中查找对应项
|
||||
const unit = unit_code.value?.find((item) => item.value === unitCode);
|
||||
return unit ? unit.label : ''; // 如果找不到则返回空字符串
|
||||
};
|
||||
|
||||
// 职工基本医疗保险
|
||||
// YB_TC_ZG_FUND_VALUE: param.detail.find((t) => t.payEnum === 110100)?.amount ?? 0, // 职工基本医疗保险
|
||||
// YB_TC_JM_FUND_VALUE: param.detail.find((t) => t.payEnum === 110200)?.amount ?? 0, // 居民基本医疗保险(修正原错误注释)
|
||||
async function printReceipt(param) {
|
||||
// 打印收费小票数据
|
||||
console.log('打印收费小票数据:', param.chargeItem);
|
||||
// console.log('!!!!!!!!!选中的收费项目:', param.chargedItems);
|
||||
console.log('患者信息:', props.patientInfo);
|
||||
// formData.totalAmount = props.totalAmount;
|
||||
// 确保第一个支付方式的金额与总金额一致;
|
||||
if (formData.selfPay.length > 0) {
|
||||
formData.selfPay[0].amount = props.totalAmount;
|
||||
}
|
||||
formData.selfPay = [
|
||||
{
|
||||
payEnum: 220100, // 现金支付
|
||||
amount: props.totalAmount,
|
||||
payLevelEnum: 2,
|
||||
},
|
||||
];
|
||||
|
||||
// 补充医疗保险基金支出细分
|
||||
// YB_BC_JM_DB_VALUE: param.detail.find((t) => t.payEnum === 120100)?.amount ?? 0, // 全体参保人的居民大病保险
|
||||
// YB_BC_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120200)?.amount ?? 0, // 大额医疗费用补助
|
||||
// YB_BC_ZG_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120300)?.amount ?? 0, // 企业职工大额医疗费用补助
|
||||
// YB_BC_GWY_BZ_VALUE: param.detail.find((t) => t.payEnum === 120400)?.amount ?? 0, // 公务员医疗补助
|
||||
try {
|
||||
// 处理param.chargedItems,添加quantityWithUnit字段
|
||||
const processedChargeItems = (param.chargeItem || []).map((item) => {
|
||||
// 获取单位标签
|
||||
const unitLabel = getUnitLabel(item.quantityUnit);
|
||||
// 拼接数量和单位
|
||||
const quantityWithUnit = unitLabel
|
||||
? `${item.quantityValue} ${unitLabel}`
|
||||
: item.quantityValue;
|
||||
|
||||
// 其他支出细分
|
||||
// OTHER_PAY_DD_FUND_VALUE: param.detail.find((t) => t.payEnum === 300001)?.amount ?? 0, // 兜底基金支出
|
||||
// OTHER_PAY_YW_SH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300002)?.amount ?? 0, // 意外伤害基金支出
|
||||
// OTHER_PAY_LX_YL_FUND_VALUE: param.detail.find((t) => t.payEnum === 300003)?.amount ?? 0, // 离休人员医疗保障金支出
|
||||
// OTHER_PAY_LX_YH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300004)?.amount ?? 0, // 离休人员优惠金支出
|
||||
// OTHER_PAY_CZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300005)?.amount ?? 0, // 财政基金支出
|
||||
// OTHER_PAY_CZ_YZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300006)?.amount ?? 0, // 财政预支支出
|
||||
// OTHER_PAY_ZG_DB_FUND_VALUE: param.detail.find((t) => t.payEnum === 300007)?.amount ?? 0, // 职工大病基金支出
|
||||
// OTHER_PAY_EY_FUND_VALUE: param.detail.find((t) => t.payEnum === 300008)?.amount ?? 0, // 二乙基金支出
|
||||
// OTHER_PAY_QX_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300009)?.amount ?? 0, // 倾斜救助支出
|
||||
// OTHER_PAY_YL_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300010)?.amount ?? 0, // 医疗救助再救助基金
|
||||
// HOSP_PART_AMT: param.detail.find((t) => t.payEnum === 300011)?.amount ?? 0, // 医院负担金额
|
||||
return {
|
||||
...item,
|
||||
quantityWithUnit, // 添加带单位的数量字段供打印使用
|
||||
};
|
||||
});
|
||||
|
||||
// 医保结算返回值
|
||||
FULAMT_OWNPAY_AMT:
|
||||
param.detail?.find((t) => t.payEnum === 1)?.amount.toFixed(2) + ' 元' ?? 0, // 全自费金额
|
||||
// OVERLMT_SELFPAY: param.detail.find((t) => t.payEnum === 3)?.amount ?? 0, // 超限价自费费用
|
||||
// PRESELFPAY_AMT: param.detail.find((t) => t.payEnum === 4)?.amount ?? 0, // 先行自付金额
|
||||
INSCP_SCP_AMT: param.detail?.find((t) => t.payEnum === 5)?.amount.toFixed(2) + ' 元' ?? 0, // 符合政策范围金额
|
||||
// ACT_PAY_DEDC: param.detail.find((t) => t.payEnum === 6)?.amount ?? 0, // 实际支付起付线
|
||||
// POOL_PROP_SELFPAY: param.detail.find((t) => t.payEnum === 7)?.amount ?? 0, // 基本医疗保险统筹基金支付比例
|
||||
// BALC: param.detail.find((t) => t.payEnum === 8)?.amount ?? 0, // 余额
|
||||
// 构造打印数据,整合选中行信息
|
||||
const printData = {
|
||||
data: [
|
||||
{
|
||||
...param,
|
||||
|
||||
// 特殊支付方式
|
||||
SELF_YB_ZH_PAY:
|
||||
param.detail?.find((t) => t.payEnum === 210000)?.amount.toFixed(2) + ' 元' ?? 0, // 个人医保账户支付
|
||||
// SELF_YB_ZH_GJ_VALUE: param.detail.find((t) => t.payEnum === 210100)?.amount ?? 0, // 账户共济支付金额
|
||||
// SELF_CASH_PAY: param.detail.find((t) => t.payEnum === 220000)?.amount ?? 0, // 个人现金支付金额
|
||||
// SELF_VX_PAY: param.detail.find((t) => t.payEnum === 230000)?.amount ?? 0, // 微信支付金额
|
||||
// SELF_ALI_PAY: param.detail.find((t) => t.payEnum === 240000)?.amount ?? 0, // 阿里支付金额
|
||||
// 收费项目列表
|
||||
chargeItemsList: processedChargeItems,
|
||||
// chargeItemsList: param.chargeItem,
|
||||
|
||||
// 现金支付细分
|
||||
// SELF_CASH_VALUE: param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0, // 个人现金支付金额(现金)
|
||||
// SELF_CASH_VX_VALUE: param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0, // 个人现金支付金额(微信)
|
||||
// SELF_CASH_ALI_VALUE: param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0, // 个人现金支付金额(支付宝)
|
||||
// SELF_CASH_UNION_VALUE: param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0, // 个人现金支付金额(银联)
|
||||
// 基础支付类型
|
||||
|
||||
// 基金类型(扩展)
|
||||
// BIRTH_FUND: param.detail.find((t) => t.payEnum === 510100)?.amount ?? 0, // 生育基金
|
||||
// RETIREE_MEDICAL: param.detail.find((t) => t.payEnum === 340100)?.amount ?? 0, // 离休人员医疗保障基金
|
||||
// URBAN_BASIC_MEDICAL: param.detail.find((t) => t.payEnum === 390100)?.amount ?? 0, // 城乡居民基本医疗保险基金
|
||||
// URBAN_SERIOUS_ILLNESS: param.detail.find((t) => t.payEnum === 390200)?.amount ?? 0, // 城乡居民大病医疗保险基金
|
||||
// MEDICAL_ASSISTANCE: param.detail.find((t) => t.payEnum === 610100)?.amount ?? 0, // 医疗救助基金
|
||||
// GOVERNMENT_SUBSIDY: param.detail.find((t) => t.payEnum === 640100)?.amount ?? 0, // 政府兜底基金
|
||||
// ACCIDENT_INSURANCE: param.detail.find((t) => t.payEnum === 390400)?.amount ?? 0, // 意外伤害基金
|
||||
// CARE_INSURANCE: param.detail.find((t) => t.payEnum === 620100)?.amount ?? 0, // 照护保险基金
|
||||
// FINANCIAL_FUND: param.detail.find((t) => t.payEnum === 360100)?.amount ?? 0, // 财政基金
|
||||
// HOSPITAL_ADVANCE: param.detail.find((t) => t.payEnum === 999900)?.amount ?? 0, // 医院垫付
|
||||
// SUPPLEMENTARY_INSURANCE: param.detail.find((t) => t.payEnum === 390300)?.amount ?? 0, // 城乡居民大病补充保险基金
|
||||
// HEALTHCARE_PREPAYMENT: param.detail.find((t) => t.payEnum === 360300)?.amount ?? 0, // 保健预支基金
|
||||
Mr_QR_Code: param.regNo,
|
||||
sex: props.patientInfo.genderEnum_enumText,
|
||||
age: props.patientInfo.age,
|
||||
personType: '职工医保',
|
||||
fixmedinsName: param.fixmedinsName + '门诊收费明细',
|
||||
name: props.patientInfo.patientName, // 姓名
|
||||
gender: props.patientInfo.genderEnum_enumText, // 性别
|
||||
age: props.patientInfo.age, // 年龄
|
||||
encounterBusNo: props.patientInfo.encounterBusNo, // 病例号
|
||||
currentDate: currentDate.value, // 收费日期
|
||||
chargedItems: props.chargedItems, // 收费项目
|
||||
totalAmount: props.totalAmount.toFixed(2) + ' 元', // 应收金额
|
||||
itemTotalAmount: total.toFixed(2) + ' 元', // 应收金额
|
||||
displayAmount: displayAmountTemp + ' 元', // 实收金额
|
||||
returnedAmount: returnedAmount.value + ' 元', // 应找零
|
||||
userName: userStore.nickName,
|
||||
},
|
||||
],
|
||||
};
|
||||
const printElements = templateJson;
|
||||
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
|
||||
// 金额大于0时显示金额和单位,等于0时不显示单位
|
||||
YB_FUND_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 100000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 基金支付总额
|
||||
SELF_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 200000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人负担总金额
|
||||
OTHER_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 其他(如医院负担金额)
|
||||
|
||||
hiprintTemplate.print2(result.data[0], {
|
||||
printer: 'xp',
|
||||
title: '门诊收费结算单',
|
||||
// 基本医保统筹基金支出
|
||||
YB_TC_FUND_AMOUNT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 110000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 基本医保统筹基金支出
|
||||
YB_BC_FUND_AMOUNT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 120000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 补充医疗保险基金支出
|
||||
YB_JZ_FUND_AMOUNT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 130000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 医疗救助基金支出
|
||||
YB_OTHER_AMOUNT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 140000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 其他支出
|
||||
|
||||
// 职工基本医疗保险
|
||||
YB_TC_ZG_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 110100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 职工基本医疗保险
|
||||
YB_TC_JM_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 110200)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 居民基本医疗保险
|
||||
|
||||
// 补充医疗保险基金支出细分
|
||||
YB_BC_JM_DB_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 120100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 全体参保人的居民大病保险
|
||||
YB_BC_DE_BZ_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 120200)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 大额医疗费用补助
|
||||
YB_BC_ZG_DE_BZ_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 120300)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 企业职工大额医疗费用补助
|
||||
YB_BC_GWY_BZ_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 120400)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 公务员医疗补助
|
||||
|
||||
// 其他支出细分
|
||||
OTHER_PAY_DD_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300001)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 兜底基金支出
|
||||
OTHER_PAY_YW_SH_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300002)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 意外伤害基金支出
|
||||
OTHER_PAY_LX_YL_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300003)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 离休人员医疗保障金支出
|
||||
OTHER_PAY_LX_YH_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300004)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 离休人员优惠金支出
|
||||
OTHER_PAY_CZ_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300005)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 财政基金支出
|
||||
OTHER_PAY_CZ_YZ_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300006)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 财政预支支出
|
||||
OTHER_PAY_ZG_DB_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300007)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 职工大病基金支出
|
||||
OTHER_PAY_EY_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300008)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 二乙基金支出
|
||||
OTHER_PAY_QX_JZ_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300009)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 倾斜救助支出
|
||||
OTHER_PAY_YL_JZ_FUND_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300010)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 医疗救助再救助基金
|
||||
HOSP_PART_AMT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 300011)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 医院负担金额
|
||||
|
||||
// 医保结算返回值
|
||||
FULAMT_OWNPAY_AMT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 1)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 全自费金额
|
||||
OVERLMT_SELFPAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 3)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 超限价自费费用
|
||||
PRESELFPAY_AMT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 4)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 先行自付金额
|
||||
INSCP_SCP_AMT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 5)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 符合政策范围金额
|
||||
ACT_PAY_DEDC: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 6)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 实际支付起付线
|
||||
POOL_PROP_SELFPAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 7)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 基本医疗保险统筹基金支付比例
|
||||
BALC: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 8)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 余额
|
||||
|
||||
// 特殊支付方式
|
||||
SELF_YB_ZH_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 210000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人医保账户支付
|
||||
SELF_YB_ZH_GJ_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 210100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 账户共济支付金额
|
||||
SELF_CASH_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 220000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人现金支付金额
|
||||
SELF_VX_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 230000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 微信支付金额
|
||||
SELF_ALI_PAY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 240000)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 阿里支付金额
|
||||
|
||||
// 现金支付细分
|
||||
SELF_CASH_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人现金支付金额(现金)
|
||||
SELF_CASH_VX_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人现金支付金额(微信)
|
||||
SELF_CASH_ALI_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人现金支付金额(支付宝)
|
||||
SELF_CASH_UNION_VALUE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 个人现金支付金额(银联)
|
||||
|
||||
// 基金类型(扩展)
|
||||
BIRTH_FUND: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 510100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 生育基金
|
||||
RETIREE_MEDICAL: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 340100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 离休人员医疗保障基金
|
||||
URBAN_BASIC_MEDICAL: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 390100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 城乡居民基本医疗保险基金
|
||||
URBAN_SERIOUS_ILLNESS: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 390200)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 城乡居民大病医疗保险基金
|
||||
MEDICAL_ASSISTANCE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 610100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 医疗救助基金
|
||||
GOVERNMENT_SUBSIDY: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 640100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 政府兜底基金
|
||||
ACCIDENT_INSURANCE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 390400)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 意外伤害基金
|
||||
CARE_INSURANCE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 620100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 照护保险基金
|
||||
FINANCIAL_FUND: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 360100)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 财政基金
|
||||
HOSPITAL_ADVANCE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 999900)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 医院垫付
|
||||
SUPPLEMENTARY_INSURANCE: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 390300)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 城乡居民大病补充保险基金
|
||||
HEALTHCARE_PREPAYMENT: (() => {
|
||||
const amount = param.detail.find((t) => t.payEnum === 360300)?.amount ?? 0;
|
||||
return amount > 0 ? amount + ' 元' : amount;
|
||||
})(), // 保健预支基金
|
||||
//微信刷卡支付
|
||||
SELF_CASH_VX_VALUE: (() => {
|
||||
// const cashValue = param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0;
|
||||
const vxValue = param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0;
|
||||
const unionValue = param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0;
|
||||
const aliValue = param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0;
|
||||
return vxValue + unionValue + aliValue + ' 元';
|
||||
})(),
|
||||
|
||||
Mr_QR_Code: param.regNo,
|
||||
sex: props.patientInfo?.genderEnum_enumText || '',
|
||||
age: props.patientInfo?.age || '',
|
||||
|
||||
personType: param.contractName,
|
||||
|
||||
fixmedinsName: param.fixmedinsName + '门诊收费明细',
|
||||
|
||||
//电子收据二维码
|
||||
pictureUrl: param.pictureUrl || 'https://chinaebill.com/img/xiaochengxu.png',
|
||||
|
||||
// 添加本地患者信息,注意安全访问
|
||||
name: props.patientInfo?.patientName || '',
|
||||
gender: props.patientInfo?.genderEnum_enumText || '',
|
||||
encounterBusNo: props.patientInfo?.encounterBusNo || '',
|
||||
currentDate: currentDate.value,
|
||||
// chargedItems: props.chargedItems,
|
||||
// 优先使用选中行的金额字段值(从图片中获取)
|
||||
totalAmount:
|
||||
(param.selectedRow?.receivableAmount
|
||||
? param.selectedRow.receivableAmount.toFixed(2)
|
||||
: props.totalAmount.toFixed(2)) + ' 元',
|
||||
displayAmount:
|
||||
(param.selectedRow?.receivedAmount
|
||||
? param.selectedRow.receivedAmount.toFixed(2)
|
||||
: displayAmount.value) + ' 元',
|
||||
returnedAmount: returnedAmount.value + ' 元',
|
||||
userName: userStore.nickName,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
// 使用printUtils进行打印
|
||||
// 选择门诊收费打印模板并传递正确的数据格式
|
||||
console.log('789797987897', printData.data[0]);
|
||||
await printUtils.print(PRINT_TEMPLATE.OUTPATIENT_CHARGE, printData.data[0]);
|
||||
|
||||
console.log('打印成功');
|
||||
} catch (error) {
|
||||
console.error('打印失败:', error);
|
||||
proxy.$modal.msgError('打印失败: ' + error.message);
|
||||
}
|
||||
}
|
||||
const throttledGetList = debounce(submit, 300);
|
||||
|
||||
function handleWxPay() {
|
||||
wxPay({
|
||||
txtCode: txtCode.value,
|
||||
chargeItemIds: props.chargeItemIds,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
id: props.paymentId,
|
||||
paymentDetails: formData.selfPay,
|
||||
ybMdtrtCertType: props.userCardInfo.psnCertType,
|
||||
busiCardInfo: props.userCardInfo.busiCardInfo,
|
||||
});
|
||||
}
|
||||
|
||||
const throttledGetList = debounce(submit, 300);
|
||||
function getWxPayResult() {
|
||||
WxPayResult({
|
||||
txtCode: txtCode.value,
|
||||
chargeItemIds: props.chargeItemIds,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
id: props.paymentId,
|
||||
paymentDetails: formData.selfPay,
|
||||
ybMdtrtCertType: props.userCardInfo.psnCertType,
|
||||
busiCardInfo: props.userCardInfo.busiCardInfo,
|
||||
});
|
||||
}
|
||||
|
||||
function handleOpen() {
|
||||
formData.totalAmount = props.totalAmount;
|
||||
@@ -342,8 +608,6 @@ function handleOpen() {
|
||||
|
||||
async function submit() {
|
||||
displayAmountTemp = displayAmount.value;
|
||||
console.log(parseFloat(displayAmount.value), 'parseFloat(displayAmount.value)');
|
||||
console.log(formData.totalAmount, 'formData.totalAmount');
|
||||
|
||||
let amount = formData.selfPay
|
||||
.reduce((sum, item) => {
|
||||
@@ -366,12 +630,13 @@ async function submit() {
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
getChargeInfo({ paymentId: props.paymentId }).then((res) => {
|
||||
printReceipt(res.data);
|
||||
// 传递完整的选中数据信息到打印方法
|
||||
printReceipt({ ...res.data, chargedItems: props.chargedItems });
|
||||
});
|
||||
formData.selfPay = [{ payEnum: 220100, amount: 0.0, payLevelEnum: 2 }];
|
||||
emit('close', 'success', res.msg);
|
||||
emit('refresh'); // 发送刷新事件给父组件
|
||||
// 长春大学自动发耗材
|
||||
// 长春市朝阳区中医院自动发耗材
|
||||
if (userStore.fixmedinsCode == 'H22010200672' && props.consumablesIdList.length > 0) {
|
||||
dispenseMedicalConsumables(props.consumablesIdList);
|
||||
}
|
||||
@@ -422,11 +687,11 @@ async function print() {
|
||||
const currentDate = ref(new Date().toLocaleString());
|
||||
|
||||
const selfPayMethods = [
|
||||
{ label: '现金', value: 220400 },
|
||||
{ label: '微信', value: 220100 },
|
||||
{ label: '支付宝', value: 220200 },
|
||||
{ label: '银联', value: 220300 },
|
||||
{ label: '优惠', value: 220500 },
|
||||
{ label: '现金', value: 220400, isWebPay: false },
|
||||
{ label: '微信', value: 220100, isWebPay: true },
|
||||
{ label: '支付宝', value: 220200, isWebPay: true },
|
||||
{ label: '银联', value: 220300, isWebPay: true },
|
||||
{ label: '优惠', value: 220500, isWebPay: false },
|
||||
];
|
||||
|
||||
// 计算剩余可输入金额
|
||||
@@ -459,8 +724,25 @@ function handleDiscountChange(value) {
|
||||
}
|
||||
|
||||
// 检查支付方式是否已使用
|
||||
const isMethodDisabled = (payEnum) => {
|
||||
return formData.selfPay.some((item) => item.payEnum === payEnum);
|
||||
const isMethodDisabled = (option) => {
|
||||
if (formData.selfPay.length > 1) {
|
||||
// 禁用已被选择的相同方式,避免重复选择
|
||||
const selectedEnums = formData.selfPay.map((item) => item.payEnum);
|
||||
if (selectedEnums.includes(option.value)) {
|
||||
return true;
|
||||
}
|
||||
// 若已经选择了任一线上支付方式,则其他线上方式不可再选,仅允许现金等线下方式
|
||||
const hasSelectedWebPay = selectedEnums.some((val) => {
|
||||
const found = selfPayMethods.find((m) => m.value === val);
|
||||
return found ? found.isWebPay === true : false;
|
||||
});
|
||||
if (hasSelectedWebPay && option.isWebPay) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleAmountChange = () => {
|
||||
@@ -478,8 +760,18 @@ const removePayment = (index) => {
|
||||
formData.selfPay.splice(index, 1);
|
||||
};
|
||||
|
||||
const clearAmount = (index) => {
|
||||
// formData.selfPay[index].amount = 0;
|
||||
const payTypeText = ref('微信');
|
||||
const payTypePlaceholder = computed(() => {
|
||||
if (payTypeText.value === '现金') {
|
||||
return '请输入现金金额';
|
||||
}
|
||||
return payTypeText.value + '支付二维码';
|
||||
});
|
||||
const clearAmount = (index, value) => {
|
||||
const selectedOption = selfPayMethods.find((item) => item.value === value);
|
||||
if (selectedOption) {
|
||||
payTypeText.value = selectedOption.label;
|
||||
}
|
||||
};
|
||||
|
||||
// 计算属性
|
||||
|
||||
@@ -430,4 +430,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +1,63 @@
|
||||
<template>
|
||||
<div style="display: flex; justify-content: space-between" class="app-container" v-loading="readCardLoading"
|
||||
:element-loading-text="loadingText">
|
||||
<div
|
||||
style="display: flex; justify-content: space-between"
|
||||
class="app-container"
|
||||
v-loading="readCardLoading"
|
||||
:element-loading-text="loadingText"
|
||||
>
|
||||
<el-card style="width: 30%">
|
||||
<template #header>
|
||||
<span style="vertical-align: middle">患者列表</span>
|
||||
</template>
|
||||
<div style="width: 100%">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="请输入患者名/病历号" clearable
|
||||
style="width: 48%; margin-bottom: 10px; margin-right: 10px" @keyup.enter="getPatientList">
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="请输入患者名/病历号"
|
||||
clearable
|
||||
style="width: 48%; margin-bottom: 10px; margin-right: 10px"
|
||||
@keyup.enter="getPatientList"
|
||||
>
|
||||
<template #append>
|
||||
<el-button icon="Search" @click="getPatientList" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-select v-model="queryParams.statusEnum" style="width: 48%; margin-bottom: 10px; margin-right: 10px"
|
||||
placeholder="收费状态" @change="getPatientList">
|
||||
<el-option v-for="item in chargeStatusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-select
|
||||
v-model="queryParams.statusEnum"
|
||||
style="width: 48%; margin-bottom: 10px; margin-right: 10px"
|
||||
placeholder="收费状态"
|
||||
@change="getPatientList"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in chargeStatusOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<div style="width: 100%">
|
||||
<el-date-picker v-model="receptionTime" type="daterange" range-separator="~" start-placeholder="开始时间"
|
||||
end-placeholder="结束时间" placement="bottom" value-format="YYYY-MM-DD"
|
||||
style="width: 84%; margin-bottom: 10px; margin-right: 10px" @change="getPatientList" />
|
||||
<el-date-picker
|
||||
v-model="receptionTime"
|
||||
type="daterange"
|
||||
range-separator="~"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
placement="bottom"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 84%; margin-bottom: 10px; margin-right: 10px"
|
||||
@change="getPatientList"
|
||||
/>
|
||||
<el-button type="primary" style="margin-bottom: 10px" @click="getPatientList">
|
||||
搜索
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table ref="patientListRef" height="620" :data="patientList" row-key="encounterId" @cell-click="clickRow"
|
||||
highlight-current-row>
|
||||
<el-table
|
||||
ref="patientListRef"
|
||||
height="620"
|
||||
:data="patientList"
|
||||
row-key="encounterId"
|
||||
@cell-click="clickRow"
|
||||
highlight-current-row
|
||||
>
|
||||
<el-table-column label="病历号" align="center" prop="encounterBusNo" />
|
||||
<el-table-column label="姓名" align="center" prop="patientName" />
|
||||
<!-- <el-table-column label="时间" align="center" prop="receptionTime" width="160">
|
||||
@@ -70,31 +102,64 @@
|
||||
<el-button type="primary" plain @click="handleReadCard('01')" style="width: 65px">
|
||||
电子凭证
|
||||
</el-button>
|
||||
<el-button type="primary" plain @click="handleReadCard('02')" style="width: 65px" :disabled="true">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="handleReadCard('02')"
|
||||
style="width: 65px"
|
||||
:disabled="true"
|
||||
>
|
||||
身份证
|
||||
</el-button>
|
||||
<el-button type="primary" plain @click="handleReadCard('03')" style="width: 65px">
|
||||
医保卡
|
||||
</el-button>
|
||||
<el-button type="primary" @click="payToSelt()" style="margin-left: 20px" :disabled="buttonDisabled">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="payToSelt()"
|
||||
style="margin-left: 20px"
|
||||
:disabled="buttonDisabled"
|
||||
>
|
||||
医保转自费
|
||||
</el-button>
|
||||
<el-button type="primary" @click="patToMedicalInsurance()" style="margin-left: 20px"
|
||||
:disabled="buttonDisabled">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="patToMedicalInsurance()"
|
||||
style="margin-left: 20px"
|
||||
:disabled="buttonDisabled"
|
||||
>
|
||||
自费转医保
|
||||
</el-button>
|
||||
<el-button type="primary" @click="studentPayTosStudentSelf()" style="margin-left: 20px"
|
||||
:disabled="buttonDisabled">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="studentPayTosStudentSelf()"
|
||||
style="margin-left: 20px"
|
||||
:disabled="buttonDisabled"
|
||||
>
|
||||
学生医保转学生自费
|
||||
</el-button>
|
||||
<el-button type="primary" @click="studentSelfToStudentPay()" style="margin-left: 20px"
|
||||
:disabled="buttonDisabled">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="studentSelfToStudentPay()"
|
||||
style="margin-left: 20px"
|
||||
:disabled="buttonDisabled"
|
||||
>
|
||||
学生自费转学生医保
|
||||
</el-button>
|
||||
<span style="float: right">合计金额:{{ totalAmounts ? totalAmounts.toFixed(2) : 0 }}元</span>
|
||||
<span style="float: right"
|
||||
>合计金额:{{ totalAmounts ? totalAmounts.toFixed(2) : 0 }}元</span
|
||||
>
|
||||
</div>
|
||||
<el-table ref="chargeListRef" height="530" :data="chargeList" row-key="id"
|
||||
@selection-change="handleSelectionChange" v-loading="chargeLoading" :span-method="objectSpanMethod" border>
|
||||
<el-table
|
||||
ref="chargeListRef"
|
||||
height="530"
|
||||
:data="chargeList"
|
||||
row-key="id"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="chargeLoading"
|
||||
:span-method="objectSpanMethod"
|
||||
border
|
||||
>
|
||||
<el-table-column type="selection" :selectable="checkSelectable" width="55" />
|
||||
<el-table-column label="单据号" align="center" prop="busNo" width="180" />
|
||||
<el-table-column label="收费项目" align="center" prop="itemName" width="200" />
|
||||
@@ -104,7 +169,16 @@
|
||||
<el-table-column label="费用性质" align="center" prop="contractName" />
|
||||
<el-table-column label="收费状态" align="center" prop="statusEnum_enumText" width="150">
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.statusEnum === 1 ? 'default' : 'success'" disable-transitions>
|
||||
<el-tag v-if="scope.row.statusEnum === 1" disable-transitions>
|
||||
{{ scope.row.statusEnum_enumText }}
|
||||
</el-tag>
|
||||
<el-tag v-else-if="scope.row.statusEnum === 5" type="success" disable-transitions>
|
||||
{{ scope.row.statusEnum_enumText }}
|
||||
</el-tag>
|
||||
<el-tag v-else-if="scope.row.statusEnum === 8" type="danger" disable-transitions>
|
||||
{{ scope.row.statusEnum_enumText }}
|
||||
</el-tag>
|
||||
<el-tag v-else type="warning" disable-transitions>
|
||||
{{ scope.row.statusEnum_enumText }}
|
||||
</el-tag>
|
||||
</template>
|
||||
@@ -115,9 +189,20 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="收款人" align="center" prop="entererId_dictText" />
|
||||
<el-table-column label="操作" align="center" fixed="right" header-align="center" class-name="no-hover-column">
|
||||
<el-table-column
|
||||
label="操作"
|
||||
align="center"
|
||||
fixed="right"
|
||||
header-align="center"
|
||||
class-name="no-hover-column"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button :disabled="!scope.row.paymentId" link type="primary" @click="printCharge(scope.row)">
|
||||
<el-button
|
||||
:disabled="!scope.row.paymentId"
|
||||
link
|
||||
type="primary"
|
||||
@click="printCharge(scope.row)"
|
||||
>
|
||||
打印
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -125,10 +210,22 @@
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
<ChargeDialog ref="chargeDialogRef" :open="openDialog" @close="handleClose" :category="patientInfo.categoryEnum"
|
||||
:totalAmount="totalAmount" :patientInfo="patientInfo" :chargeItemIds="chargeItemIdList"
|
||||
:consumablesIdList="consumablesIdList" :chrgBchnoList="chrgBchnoList" :userCardInfo="userCardInfo"
|
||||
:paymentId="paymentId" :details="details" :chargedItems="chargedItems" @refresh="getPatientList" />
|
||||
<ChargeDialog
|
||||
ref="chargeDialogRef"
|
||||
:open="openDialog"
|
||||
@close="handleClose"
|
||||
:category="patientInfo.categoryEnum"
|
||||
:totalAmount="totalAmount"
|
||||
:patientInfo="patientInfo"
|
||||
:chargeItemIds="chargeItemIdList"
|
||||
:consumablesIdList="consumablesIdList"
|
||||
:chrgBchnoList="chrgBchnoList"
|
||||
:userCardInfo="userCardInfo"
|
||||
:paymentId="paymentId"
|
||||
:details="details"
|
||||
:chargedItems="chargedItems"
|
||||
@refresh="getPatientList"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -212,7 +309,6 @@ function handleTotalAmount() {
|
||||
totalAmounts.value = chargeList.value.reduce((accumulator, currentRow) => {
|
||||
return new Decimal(accumulator).add(currentRow.totalPrice.toFixed(2) || 0);
|
||||
}, new Decimal(0));
|
||||
|
||||
} else {
|
||||
totalAmounts.value = selectedRows.value.reduce((accumulator, currentRow) => {
|
||||
return new Decimal(accumulator).add(currentRow.totalPrice.toFixed(2) || 0);
|
||||
@@ -282,7 +378,6 @@ const consumablesIdList = ref([]);
|
||||
// 确认收费
|
||||
function confirmCharge() {
|
||||
let selectRows = chargeListRef.value.getSelectionRows();
|
||||
console.log('selectRows:', selectRows);
|
||||
if (selectRows.length == 0) {
|
||||
proxy.$modal.msgWarning('请选择一条收费项目');
|
||||
return;
|
||||
@@ -299,6 +394,9 @@ function confirmCharge() {
|
||||
});
|
||||
chargedItems.value = selectRows;
|
||||
|
||||
// 将选中的行数据赋值给chargedItems
|
||||
chargedItems.value = selectRows;
|
||||
|
||||
// totalAmount.value = selectRows.reduce((accumulator, currentRow) => {
|
||||
// return accumulator + (currentRow.totalPrice || 0);
|
||||
// }, 0);
|
||||
@@ -567,6 +665,19 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
return [1, 1];
|
||||
}
|
||||
|
||||
// function printCharge(row) {
|
||||
// // 打印功能实现
|
||||
// let rows = [];
|
||||
// chargeList.value.forEach((item, index) => {
|
||||
// if (item.paymentId === row.paymentId) {
|
||||
// rows.push(item);
|
||||
// }
|
||||
// });
|
||||
// chargedItems.value = rows;
|
||||
// getChargeInfo({ paymentId: row.paymentId }).then((res) => {
|
||||
// proxy.$refs['chargeDialogRef'].printReceipt(res.data);
|
||||
// });
|
||||
// }
|
||||
function printCharge(row) {
|
||||
// 打印功能实现
|
||||
let rows = [];
|
||||
@@ -577,7 +688,37 @@ function printCharge(row) {
|
||||
});
|
||||
chargedItems.value = rows;
|
||||
getChargeInfo({ paymentId: row.paymentId }).then((res) => {
|
||||
proxy.$refs['chargeDialogRef'].printReceipt(res.data);
|
||||
// 设置实收金额
|
||||
if (res.data && res.data.detail) {
|
||||
const amountDetail = res.data.detail.find((item) => item.payEnum == 220000);
|
||||
if (amountDetail) {
|
||||
totalAmount.value = amountDetail.amount;
|
||||
|
||||
// 为合并的行设置金额相关字段值
|
||||
rows.forEach((item) => {
|
||||
if (item.actualPrice === undefined || item.actualPrice === null) {
|
||||
item.actualPrice = 0;
|
||||
}
|
||||
if (item.discountAmount === undefined || item.discountAmount === null) {
|
||||
item.discountAmount = 0;
|
||||
}
|
||||
if (item.discountRate === undefined || item.discountRate === null) {
|
||||
item.discountRate = 100;
|
||||
}
|
||||
});
|
||||
}
|
||||
// 增强打印数据,包含选中行的完整信息
|
||||
const enhancedPrintData = {
|
||||
...res.data,
|
||||
selectedRow: row, // 添加选中行的完整数据
|
||||
chargedItems: rows, // 添加所有相关的收费项目
|
||||
};
|
||||
// 通知子组件更新内部状态
|
||||
// 通过 nextTick 确保 DOM 更新后再调用打印
|
||||
nextTick(() => {
|
||||
proxy.$refs['chargeDialogRef'].printReceipt(enhancedPrintData);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -589,4 +730,4 @@ function printCharge(row) {
|
||||
:deep(.el-table__body) tr:hover td.no-hover-column {
|
||||
background-color: inherit !important;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -189,8 +189,15 @@ const emit = defineEmits(['close']);
|
||||
|
||||
function submit() {
|
||||
console.log(props.chargeItemIds);
|
||||
|
||||
if (parseFloat(displayAmount.value) < formData.totalAmount) {
|
||||
console.log(
|
||||
displayAmount.value,
|
||||
parseFloat(displayAmount.value),
|
||||
formData.totalAmount,
|
||||
formData,
|
||||
'feeRefund'
|
||||
);
|
||||
//比较时,将金额都转换为两位小数的字符串再转换为浮点数,避免浮点数精度问题
|
||||
if (parseFloat(displayAmount.value) < parseFloat(formData.totalAmount.toFixed(2))) {
|
||||
proxy.$modal.msgError('请输入正确的金额');
|
||||
return;
|
||||
}
|
||||
@@ -247,7 +254,7 @@ function submit() {
|
||||
// returnedAmount: parseFloat(returnedAmount.value),
|
||||
}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
// 长春大学自动退耗材
|
||||
// 长春市朝阳区中医院自动退耗材
|
||||
|
||||
emit('close', 'success');
|
||||
}
|
||||
@@ -432,4 +439,4 @@ function close() {
|
||||
.amount-input .el-input__inner {
|
||||
padding-right: 30px !important;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -139,16 +139,6 @@
|
||||
prop="chargeStatus_enumText"
|
||||
width="100"
|
||||
/>
|
||||
<!-- <el-table-column
|
||||
label="发药/执行状态"
|
||||
align="center"
|
||||
prop="dispenseStatus_enumText"
|
||||
width="130"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.dispenseStatus_enumText || scope.row.serviceStatus_enumText }}
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column label="数量" align="center" width="100">
|
||||
<template #default="scope">
|
||||
{{ scope.row.quantityValue + ' ' + scope.row.quantityUnit_dictText }}
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
<template>
|
||||
<el-dialog title="确认收费" v-model="props.open" width="700px" append-to-body destroy-on-close>
|
||||
<el-dialog
|
||||
title="确认收费"
|
||||
v-model="props.open"
|
||||
@close="close"
|
||||
width="700px"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
>
|
||||
<div v-loading="dialogLoading">
|
||||
<el-text size="large" style="display: block; margin-bottom: 15px">
|
||||
收费日期:{{ currentDate }}
|
||||
@@ -27,7 +34,7 @@
|
||||
:key="payEnum.value"
|
||||
:label="payEnum.label"
|
||||
:value="payEnum.value"
|
||||
:disabled="isMethodDisabled(payEnum.value)"
|
||||
:disabled="isMethodDisabled(payEnum)"
|
||||
/>
|
||||
</el-select>
|
||||
<span>支付金额:</span>
|
||||
@@ -66,6 +73,17 @@
|
||||
</el-text>
|
||||
</div>
|
||||
</div>
|
||||
<div class="payment-item">
|
||||
<span>{{ payTypeText }}支付:</span>
|
||||
<el-input
|
||||
ref="txtCodeRef"
|
||||
v-model="txtCode"
|
||||
style="width: 300px"
|
||||
:placeholder="payTypePlaceholder"
|
||||
/>
|
||||
<el-button link type="primary" @click="handleWxPay()">扫码支付</el-button>
|
||||
<el-button link type="primary" @click="getWxPayResult()">查看结果</el-button>
|
||||
</div>
|
||||
<!-- 金额汇总 -->
|
||||
<div class="summary">
|
||||
<el-space :size="30">
|
||||
@@ -90,12 +108,13 @@
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
|
||||
<script setup>
|
||||
import { savePayment } from './outpatientregistration';
|
||||
import { savePayment, wxPay, WxPayResult } from './outpatientregistration';
|
||||
import { computed, watch, reactive, ref, getCurrentInstance, nextTick } from 'vue';
|
||||
import { Delete } from '@element-plus/icons-vue';
|
||||
import { debounce } from 'lodash-es';
|
||||
import printUtils, { PRINT_TEMPLATE } from '@/utils/printUtils';
|
||||
|
||||
const props = defineProps({
|
||||
open: {
|
||||
@@ -130,10 +149,19 @@ const props = defineProps({
|
||||
type: Object,
|
||||
default: undefined,
|
||||
},
|
||||
orgId: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
orgName: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const dialogLoading = ref(false);
|
||||
const txtCode = ref('');
|
||||
const throttledGetList = debounce(submit, 300);
|
||||
const formData = reactive({
|
||||
totalAmount: 0,
|
||||
@@ -157,114 +185,229 @@ watch(
|
||||
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
// 根据printUtils实现的打印方法
|
||||
async function printReceipt(param) {
|
||||
console.log(param, 'param');
|
||||
console.log(props.patientInfo, 'props.patientInfo');
|
||||
console.log('打印收费小票数据:', param);
|
||||
console.log('患者信息:', props.patientInfo);
|
||||
|
||||
// 构造一个新的对象,添加头 "data"
|
||||
const result = {
|
||||
data: [
|
||||
{
|
||||
...param,
|
||||
// 基础支付类型
|
||||
YB_FUND_PAY: param.detail.find((t) => t.payEnum === 100000)?.amount ?? 0, // 基金支付总额
|
||||
SELF_PAY: param.detail.find((t) => t.payEnum === 200000)?.amount ?? 0, // 个人负担总金额
|
||||
OTHER_PAY: param.detail.find((t) => t.payEnum === 300000)?.amount ?? 0, // 其他(如医院负担金额)
|
||||
try {
|
||||
// 构造打印数据
|
||||
const printData = {
|
||||
data: [
|
||||
{
|
||||
...param,
|
||||
// 基础支付类型
|
||||
YB_FUND_PAY: param.detail.find((t) => t.payEnum === 100000)?.amount ?? 0, // 基金支付总额
|
||||
SELF_PAY: param.detail.find((t) => t.payEnum === 200000)?.amount ?? 0, // 个人负担总金额
|
||||
OTHER_PAY: param.detail.find((t) => t.payEnum === 300000)?.amount ?? 0, // 其他(如医院负担金额)
|
||||
|
||||
// 基本医保统筹基金支出
|
||||
YB_TC_FUND_AMOUNT: param.detail.find((t) => t.payEnum === 110000)?.amount ?? 0, // 基本医保统筹基金支出
|
||||
YB_BC_FUND_AMOUNT: param.detail.find((t) => t.payEnum === 120000)?.amount ?? 0, // 补充医疗保险基金支出
|
||||
YB_JZ_FUND_AMOUNT: param.detail.find((t) => t.payEnum === 130000)?.amount ?? 0, // 医疗救助基金支出
|
||||
YB_OTHER_AMOUNT: param.detail.find((t) => t.payEnum === 140000)?.amount ?? 0, // 其他支出
|
||||
// 基本医保统筹基金支出
|
||||
YB_TC_FUND_AMOUNT: param.detail.find((t) => t.payEnum === 110000)?.amount ?? 0, // 基本医保统筹基金支出
|
||||
YB_BC_FUND_AMOUNT: param.detail.find((t) => t.payEnum === 120000)?.amount ?? 0, // 补充医疗保险基金支出
|
||||
YB_JZ_FUND_AMOUNT: param.detail.find((t) => t.payEnum === 130000)?.amount ?? 0, // 医疗救助基金支出
|
||||
YB_OTHER_AMOUNT: param.detail.find((t) => t.payEnum === 140000)?.amount ?? 0, // 其他支出
|
||||
|
||||
// 职工基本医疗保险
|
||||
YB_TC_ZG_FUND_VALUE: param.detail.find((t) => t.payEnum === 110100)?.amount ?? 0, // 职工基本医疗保险
|
||||
YB_TC_JM_FUND_VALUE: param.detail.find((t) => t.payEnum === 110200)?.amount ?? 0, // 居民基本医疗保险(修正原错误注释)
|
||||
// 职工基本医疗保险
|
||||
YB_TC_ZG_FUND_VALUE: param.detail.find((t) => t.payEnum === 110100)?.amount ?? 0, // 职工基本医疗保险
|
||||
YB_TC_JM_FUND_VALUE: param.detail.find((t) => t.payEnum === 110200)?.amount ?? 0, // 居民基本医疗保险
|
||||
|
||||
// 补充医疗保险基金支出细分
|
||||
YB_BC_JM_DB_VALUE: param.detail.find((t) => t.payEnum === 120100)?.amount ?? 0, // 全体参保人的居民大病保险
|
||||
YB_BC_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120200)?.amount ?? 0, // 大额医疗费用补助
|
||||
YB_BC_ZG_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120300)?.amount ?? 0, // 企业职工大额医疗费用补助
|
||||
YB_BC_GWY_BZ_VALUE: param.detail.find((t) => t.payEnum === 120400)?.amount ?? 0, // 公务员医疗补助
|
||||
// 补充医疗保险基金支出细分
|
||||
YB_BC_JM_DB_VALUE: param.detail.find((t) => t.payEnum === 120100)?.amount ?? 0, // 全体参保人的居民大病保险
|
||||
YB_BC_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120200)?.amount ?? 0, // 大额医疗费用补助
|
||||
YB_BC_ZG_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120300)?.amount ?? 0, // 企业职工大额医疗费用补助
|
||||
YB_BC_GWY_BZ_VALUE: param.detail.find((t) => t.payEnum === 120400)?.amount ?? 0, // 公务员医疗补助
|
||||
|
||||
// 其他支出细分
|
||||
OTHER_PAY_DD_FUND_VALUE: param.detail.find((t) => t.payEnum === 300001)?.amount ?? 0, // 兜底基金支出
|
||||
OTHER_PAY_YW_SH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300002)?.amount ?? 0, // 意外伤害基金支出
|
||||
OTHER_PAY_LX_YL_FUND_VALUE: param.detail.find((t) => t.payEnum === 300003)?.amount ?? 0, // 离休人员医疗保障金支出
|
||||
OTHER_PAY_LX_YH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300004)?.amount ?? 0, // 离休人员优惠金支出
|
||||
OTHER_PAY_CZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300005)?.amount ?? 0, // 财政基金支出
|
||||
OTHER_PAY_CZ_YZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300006)?.amount ?? 0, // 财政预支支出
|
||||
OTHER_PAY_ZG_DB_FUND_VALUE: param.detail.find((t) => t.payEnum === 300007)?.amount ?? 0, // 职工大病基金支出
|
||||
OTHER_PAY_EY_FUND_VALUE: param.detail.find((t) => t.payEnum === 300008)?.amount ?? 0, // 二乙基金支出
|
||||
OTHER_PAY_QX_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300009)?.amount ?? 0, // 倾斜救助支出
|
||||
OTHER_PAY_YL_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300010)?.amount ?? 0, // 医疗救助再救助基金
|
||||
HOSP_PART_AMT: param.detail.find((t) => t.payEnum === 300011)?.amount ?? 0, // 医院负担金额
|
||||
// 其他支出细分
|
||||
OTHER_PAY_DD_FUND_VALUE: param.detail.find((t) => t.payEnum === 300001)?.amount ?? 0, // 兜底基金支出
|
||||
OTHER_PAY_YW_SH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300002)?.amount ?? 0, // 意外伤害基金支出
|
||||
OTHER_PAY_LX_YL_FUND_VALUE: param.detail.find((t) => t.payEnum === 300003)?.amount ?? 0, // 离休人员医疗保障金支出
|
||||
OTHER_PAY_LX_YH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300004)?.amount ?? 0, // 离休人员优惠金支出
|
||||
OTHER_PAY_CZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300005)?.amount ?? 0, // 财政基金支出
|
||||
OTHER_PAY_CZ_YZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300006)?.amount ?? 0, // 财政预支支出
|
||||
OTHER_PAY_ZG_DB_FUND_VALUE: param.detail.find((t) => t.payEnum === 300007)?.amount ?? 0, // 职工大病基金支出
|
||||
OTHER_PAY_EY_FUND_VALUE: param.detail.find((t) => t.payEnum === 300008)?.amount ?? 0, // 二乙基金支出
|
||||
OTHER_PAY_QX_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300009)?.amount ?? 0, // 倾斜救助支出
|
||||
OTHER_PAY_YL_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300010)?.amount ?? 0, // 医疗救助再救助基金
|
||||
HOSP_PART_AMT: param.detail.find((t) => t.payEnum === 300011)?.amount ?? 0, // 医院负担金额
|
||||
|
||||
// 医保结算返回值
|
||||
FULAMT_OWNPAY_AMT: param.detail.find((t) => t.payEnum === 1)?.amount ?? 0, // 全自费金额
|
||||
OVERLMT_SELFPAY: param.detail.find((t) => t.payEnum === 3)?.amount ?? 0, // 超限价自费费用
|
||||
PRESELFPAY_AMT: param.detail.find((t) => t.payEnum === 4)?.amount ?? 0, // 先行自付金额
|
||||
INSCP_SCP_AMT: param.detail.find((t) => t.payEnum === 5)?.amount ?? 0, // 符合政策范围金额
|
||||
ACT_PAY_DEDC: param.detail.find((t) => t.payEnum === 6)?.amount ?? 0, // 实际支付起付线
|
||||
POOL_PROP_SELFPAY: param.detail.find((t) => t.payEnum === 7)?.amount ?? 0, // 基本医疗保险统筹基金支付比例
|
||||
BALC: param.detail.find((t) => t.payEnum === 8)?.amount ?? 0, // 余额
|
||||
// 医保结算返回值 - 修复运算符优先级问题,添加括号确保正确拼接'元'
|
||||
FULAMT_OWNPAY_AMT: (param.detail?.find((t) => t.payEnum === 1)?.amount ?? 0) + '元', // 全自费金额
|
||||
OVERLMT_SELFPAY: (param.detail?.find((t) => t.payEnum === 3)?.amount ?? 0) + '元', // 超限价自费费用
|
||||
PRESELFPAY_AMT: (param.detail?.find((t) => t.payEnum === 4)?.amount ?? 0) + '元', // 先行自付金额
|
||||
INSCP_SCP_AMT: (param.detail?.find((t) => t.payEnum === 5)?.amount ?? 0) + '元', // 符合政策范围金额
|
||||
ACT_PAY_DEDC: (param.detail?.find((t) => t.payEnum === 6)?.amount ?? 0) + '元', // 实际支付起付线
|
||||
POOL_PROP_SELFPAY: (param.detail?.find((t) => t.payEnum === 7)?.amount ?? 0) + '元', // 基本医疗保险统筹基金支付比例
|
||||
BALC: (param.detail?.find((t) => t.payEnum === 8)?.amount ?? 0) + '元', // 余额
|
||||
|
||||
// 特殊支付方式
|
||||
SELF_YB_ZH_PAY: param.detail.find((t) => t.payEnum === 210000)?.amount ?? 0, // 个人医保账户支付
|
||||
SELF_YB_ZH_GJ_VALUE: param.detail.find((t) => t.payEnum === 210100)?.amount ?? 0, // 账户共济支付金额
|
||||
SELF_CASH_PAY: param.detail.find((t) => t.payEnum === 220000)?.amount ?? 0, // 个人现金支付金额
|
||||
SELF_VX_PAY: param.detail.find((t) => t.payEnum === 230000)?.amount ?? 0, // 微信支付金额
|
||||
SELF_ALI_PAY: param.detail.find((t) => t.payEnum === 240000)?.amount ?? 0, // 阿里支付金额
|
||||
// 特殊支付方式
|
||||
SELF_YB_ZH_PAY:
|
||||
(param.detail?.find((t) => t.payEnum === 210000)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 210000)?.amount ?? 0) + '元'
|
||||
: '', // 个人医保账户支付
|
||||
SELF_YB_ZH_GJ_VALUE:
|
||||
(param.detail?.find((t) => t.payEnum === 210100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 210100)?.amount ?? 0) + '元'
|
||||
: '', // 账户共济支付金额
|
||||
SELF_CASH_PAY:
|
||||
(param.detail?.find((t) => t.payEnum === 220000)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 220000)?.amount ?? 0) + '元'
|
||||
: '', // 个人现金支付金额
|
||||
SELF_VX_PAY:
|
||||
(param.detail?.find((t) => t.payEnum === 230000)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 230000)?.amount ?? 0) + '元'
|
||||
: '', // 微信支付金额
|
||||
SELF_ALI_PAY:
|
||||
(param.detail?.find((t) => t.payEnum === 240000)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 240000)?.amount ?? 0) + '元'
|
||||
: '', // 阿里支付金额
|
||||
|
||||
// 现金支付细分
|
||||
SELF_CASH_VALUE: param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0, // 个人现金支付金额(现金)
|
||||
SELF_CASH_VX_VALUE: param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0, // 个人现金支付金额(微信)
|
||||
SELF_CASH_ALI_VALUE: param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0, // 个人现金支付金额(支付宝)
|
||||
SELF_CASH_UNION_VALUE: param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0, // 个人现金支付金额(银联)
|
||||
// 现金支付细分
|
||||
SELF_CASH_VALUE:
|
||||
(param.detail?.find((t) => t.payEnum === 220400)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 220400)?.amount ?? 0) + '元'
|
||||
: '', // 个人现金支付金额(现金)
|
||||
SELF_CASH_VX_VALUE:
|
||||
(param.detail?.find((t) => t.payEnum === 220100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 220100)?.amount ?? 0) + '元'
|
||||
: '', // 个人现金支付金额(微信)
|
||||
SELF_CASH_ALI_VALUE:
|
||||
(param.detail?.find((t) => t.payEnum === 220200)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 220200)?.amount ?? 0) + '元'
|
||||
: '', // 个人现金支付金额(支付宝)
|
||||
SELF_CASH_UNION_VALUE:
|
||||
(param.detail?.find((t) => t.payEnum === 220300)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 220300)?.amount ?? 0) + '元'
|
||||
: '', // 个人现金支付金额(银联)
|
||||
|
||||
// 基金类型(扩展)
|
||||
BIRTH_FUND: param.detail.find((t) => t.payEnum === 510100)?.amount ?? 0, // 生育基金
|
||||
RETIREE_MEDICAL: param.detail.find((t) => t.payEnum === 340100)?.amount ?? 0, // 离休人员医疗保障基金
|
||||
URBAN_BASIC_MEDICAL: param.detail.find((t) => t.payEnum === 390100)?.amount ?? 0, // 城乡居民基本医疗保险基金
|
||||
URBAN_SERIOUS_ILLNESS: param.detail.find((t) => t.payEnum === 390200)?.amount ?? 0, // 城乡居民大病医疗保险基金
|
||||
MEDICAL_ASSISTANCE: param.detail.find((t) => t.payEnum === 610100)?.amount ?? 0, // 医疗救助基金
|
||||
GOVERNMENT_SUBSIDY: param.detail.find((t) => t.payEnum === 640100)?.amount ?? 0, // 政府兜底基金
|
||||
ACCIDENT_INSURANCE: param.detail.find((t) => t.payEnum === 390400)?.amount ?? 0, // 意外伤害基金
|
||||
CARE_INSURANCE: param.detail.find((t) => t.payEnum === 620100)?.amount ?? 0, // 照护保险基金
|
||||
FINANCIAL_FUND: param.detail.find((t) => t.payEnum === 360100)?.amount ?? 0, // 财政基金
|
||||
HOSPITAL_ADVANCE: param.detail.find((t) => t.payEnum === 999900)?.amount ?? 0, // 医院垫付
|
||||
SUPPLEMENTARY_INSURANCE: param.detail.find((t) => t.payEnum === 390300)?.amount ?? 0, // 城乡居民大病补充保险基金
|
||||
HEALTHCARE_PREPAYMENT: param.detail.find((t) => t.payEnum === 360300)?.amount ?? 0, // 保健预支基金
|
||||
Mr_QR_Code: param.regNo,
|
||||
sex: props.patientInfo.genderEnum_enumText,
|
||||
age: props.patientInfo.age,
|
||||
personType: '职工医保',
|
||||
fixmedinsName: param.fixmedinsName + '门诊收费明细',
|
||||
},
|
||||
],
|
||||
// feeDetial: param.detail, //收费项目,后端还未返回
|
||||
};
|
||||
// 将对象转换为 JSON 字符串
|
||||
let jsonString = JSON.stringify(result, null, 2);
|
||||
console.log(jsonString, 'jsonString');
|
||||
await CefSharp.BindObjectAsync('boundAsync');
|
||||
await boundAsync.printReport(
|
||||
'门诊收费明细单.grf',
|
||||
jsonString
|
||||
)
|
||||
// 基金类型(扩展)
|
||||
BIRTH_FUND:
|
||||
(param.detail?.find((t) => t.payEnum === 510100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 510100)?.amount ?? 0) + '元'
|
||||
: '', // 生育基金
|
||||
RETIREE_MEDICAL:
|
||||
(param.detail?.find((t) => t.payEnum === 340100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 340100)?.amount ?? 0) + '元'
|
||||
: '', // 离休人员医疗保障基金
|
||||
URBAN_BASIC_MEDICAL:
|
||||
(param.detail?.find((t) => t.payEnum === 390100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 390100)?.amount ?? 0) + '元'
|
||||
: '', // 城乡居民基本医疗保险基金
|
||||
URBAN_SERIOUS_ILLNESS:
|
||||
(param.detail?.find((t) => t.payEnum === 390200)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 390200)?.amount ?? 0) + '元'
|
||||
: '', // 城乡居民大病医疗保险基金
|
||||
MEDICAL_ASSISTANCE:
|
||||
(param.detail?.find((t) => t.payEnum === 610100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 610100)?.amount ?? 0) + '元'
|
||||
: '', // 医疗救助基金
|
||||
GOVERNMENT_SUBSIDY:
|
||||
(param.detail?.find((t) => t.payEnum === 640100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 640100)?.amount ?? 0) + '元'
|
||||
: '', // 政府兜底基金
|
||||
ACCIDENT_INSURANCE:
|
||||
(param.detail?.find((t) => t.payEnum === 390400)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 390400)?.amount ?? 0) + '元'
|
||||
: '', // 意外伤害基金
|
||||
CARE_INSURANCE:
|
||||
(param.detail?.find((t) => t.payEnum === 620100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 620100)?.amount ?? 0) + '元'
|
||||
: '', // 照护保险基金
|
||||
FINANCIAL_FUND:
|
||||
(param.detail?.find((t) => t.payEnum === 360100)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 360100)?.amount ?? 0) + '元'
|
||||
: '', // 财政基金
|
||||
HOSPITAL_ADVANCE:
|
||||
(param.detail?.find((t) => t.payEnum === 999900)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 999900)?.amount ?? 0) + '元'
|
||||
: '', // 医院垫付
|
||||
SUPPLEMENTARY_INSURANCE:
|
||||
(param.detail?.find((t) => t.payEnum === 390300)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 390300)?.amount ?? 0) + '元'
|
||||
: '', // 城乡居民大病补充保险基金
|
||||
HEALTHCARE_PREPAYMENT:
|
||||
(param.detail?.find((t) => t.payEnum === 360300)?.amount ?? 0) > 0
|
||||
? (param.detail?.find((t) => t.payEnum === 360300)?.amount ?? 0) + '元'
|
||||
: '', // 保健预支基金
|
||||
//微信刷卡支付
|
||||
SELF_CASH_VX_VALUE: (() => {
|
||||
// const cashValue = param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0;
|
||||
const vxValue = param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0;
|
||||
const unionValue = param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0;
|
||||
const aliValue = param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0;
|
||||
return vxValue + unionValue + aliValue + '元';
|
||||
})(),
|
||||
|
||||
// 患者信息
|
||||
patientName: param.patientName || '',
|
||||
sex: param.sex === 1 ? '女' : param.sex === 0 ? '男' : param.sex || '',
|
||||
age: param.age ? param.age + '岁' : '',
|
||||
personType: param.contractName, //病人类型
|
||||
|
||||
// 挂号和就诊信息
|
||||
encounterId: props.patientInfo?.encounterId || '',
|
||||
busNo: props.patientInfo?.busNo || '',
|
||||
Mr_QR_Code: param.regNo || props.registerBusNo,
|
||||
// 科室和医生信息
|
||||
organizationName: props.orgName || props.patientInfo?.organizationName || '',
|
||||
practitionerName: props.patientInfo?.practitionerName || '',
|
||||
healthcareName: props.patientInfo?.healthcareName || '',
|
||||
// 费用信息
|
||||
fixmedinsName: param.fixmedinsName
|
||||
? param.fixmedinsName + '门诊收费明细'
|
||||
: '门诊收费明细',
|
||||
// 收费员
|
||||
cashier: param.paymentEmployee,
|
||||
|
||||
// 收费时间
|
||||
chargeTime: new Date().toLocaleString(),
|
||||
},
|
||||
],
|
||||
};
|
||||
// 选择门诊挂号打印模板
|
||||
console.log('printDataprintDataprintDataprintDataprintData', printData.data[0]);
|
||||
await printUtils.print(PRINT_TEMPLATE.OUTPATIENT_REGISTRATION, printData.data[0]);
|
||||
console.log('打印成功');
|
||||
} catch (error) {
|
||||
console.error('打印失败:', error);
|
||||
proxy.$modal.msgError('打印失败: ' + error.message);
|
||||
}
|
||||
}
|
||||
|
||||
function handleWxPay() {
|
||||
console.log('开始微信支付,当前支付详情:', formData.selfPay);
|
||||
console.log(
|
||||
'支付金额详情:',
|
||||
formData.selfPay.map((item) => ({ payEnum: item.payEnum, amount: item.amount }))
|
||||
);
|
||||
wxPay({
|
||||
txtCode: txtCode.value,
|
||||
//chargeItemIds: props.chargeItemIds,
|
||||
//encounterId: props.patientInfo.encounterId,
|
||||
id: props.paymentId,
|
||||
paymentDetails: formData.selfPay,
|
||||
// ybMdtrtCertType: props.userCardInfo.psnCertType,
|
||||
// busiCardInfo: props.userCardInfo.busiCardInfo,
|
||||
})
|
||||
.then((response) => {
|
||||
//返回结果是jsonString,可判断其调用是否成功
|
||||
console.log(response, 'response');
|
||||
var res = JSON.parse(response);
|
||||
if (!res.IsSuccess) {
|
||||
proxy.$modal.msgError('调用打印插件失败:' + res.ErrorMessage);
|
||||
}
|
||||
console.log('微信支付请求成功:', response);
|
||||
})
|
||||
.catch((error) => {
|
||||
proxy.$modal.msgError('调用打印插件失败:' + error);
|
||||
console.error('微信支付请求失败:', error);
|
||||
});
|
||||
}
|
||||
|
||||
function getWxPayResult() {
|
||||
WxPayResult({
|
||||
txtCode: txtCode.value,
|
||||
chargeItemIds: props.chargeItemIds,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
id: props.paymentId,
|
||||
paymentDetails: formData.selfPay,
|
||||
ybMdtrtCertType: props.userCardInfo.psnCertType,
|
||||
busiCardInfo: props.userCardInfo.busiCardInfo,
|
||||
});
|
||||
}
|
||||
|
||||
function submit() {
|
||||
if (parseFloat(displayAmount.value) < formData.totalAmount) {
|
||||
proxy.$modal.msgError('请输入正确的结算金额');
|
||||
@@ -288,8 +431,8 @@ function submit() {
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
printReceipt(res.data);
|
||||
(formData.selfPay = [{ payEnum: 220100, amount: 0.0, payLevelEnum: 2 }]),
|
||||
emit('close', 'success');
|
||||
formData.selfPay = [{ payEnum: 220100, amount: 0.0, payLevelEnum: 2 }];
|
||||
emit('close', 'success');
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
@@ -300,10 +443,10 @@ function submit() {
|
||||
const currentDate = ref(new Date().toLocaleString());
|
||||
|
||||
const selfPayMethods = [
|
||||
{ label: '现金', value: 220400 },
|
||||
{ label: '微信', value: 220100 },
|
||||
{ label: '支付宝', value: 220200 },
|
||||
{ label: '银联', value: 220300 },
|
||||
{ label: '现金', value: 220400, isWebPay: false },
|
||||
{ label: '微信', value: 220100, isWebPay: true },
|
||||
{ label: '支付宝', value: 220200, isWebPay: true },
|
||||
{ label: '银联', value: 220300, isWebPay: true },
|
||||
];
|
||||
|
||||
// 计算剩余可输入金额
|
||||
@@ -326,10 +469,27 @@ const getMax = (index) => {
|
||||
};
|
||||
|
||||
// 检查支付方式是否已使用
|
||||
const isMethodDisabled = (payEnum) => {
|
||||
return formData.selfPay.some((item) => item.payEnum === payEnum);
|
||||
const isMethodDisabled = (option) => {
|
||||
if (formData.selfPay.length > 1) {
|
||||
// 禁用已被选择的相同方式,避免重复选择
|
||||
const selectedEnums = formData.selfPay.map((item) => item.payEnum);
|
||||
debugger;
|
||||
if (selectedEnums.includes(option.value)) {
|
||||
return true;
|
||||
}
|
||||
// 若已经选择了任一线上支付方式,则其他线上方式不可再选,仅允许现金等线下方式
|
||||
const hasSelectedWebPay = selectedEnums.some((val) => {
|
||||
const found = selfPayMethods.find((m) => m.value === val);
|
||||
return found ? found.isWebPay === true : false;
|
||||
});
|
||||
if (hasSelectedWebPay && option.isWebPay) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleAmountChange = () => {
|
||||
// 不需要在这里直接设置 returnedAmount,依赖 computed 属性
|
||||
};
|
||||
@@ -344,9 +504,21 @@ const addPayment = () => {
|
||||
const removePayment = (index) => {
|
||||
formData.selfPay.splice(index, 1);
|
||||
};
|
||||
|
||||
const payTypeText = ref('微信');
|
||||
const payTypePlaceholder = computed(() => {
|
||||
if (payTypeText.value === '现金') {
|
||||
return '请输入现金金额';
|
||||
}
|
||||
return payTypeText.value + '支付二维码';
|
||||
});
|
||||
const clearAmount = (index) => {
|
||||
// formData.selfPay[index].amount = 0;
|
||||
const selectedOption = selfPayMethods.find(
|
||||
(item) => item.value === formData.selfPay[index].payEnum
|
||||
);
|
||||
if (selectedOption) {
|
||||
payTypeText.value = selectedOption.label;
|
||||
}
|
||||
};
|
||||
|
||||
// 计算属性
|
||||
@@ -364,6 +536,8 @@ const returnedAmount = computed(() => {
|
||||
});
|
||||
|
||||
function close() {
|
||||
//清空表单数据
|
||||
txtCode.value = '';
|
||||
emit('close', 'cancel');
|
||||
}
|
||||
</script>
|
||||
@@ -463,4 +637,4 @@ function close() {
|
||||
color: #999;
|
||||
pointer-events: none; /* 避免点击干扰 */
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import request from '@/utils/request'
|
||||
import { parseStrEmpty } from "@/utils/openhis";
|
||||
import request from '@/utils/request';
|
||||
import { parseStrEmpty } from '@/utils/openhis';
|
||||
|
||||
// 查询初期所需数据
|
||||
export function getInit() {
|
||||
return request({
|
||||
url: '/charge-manage/register/init',
|
||||
method: 'get'
|
||||
})
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
// 查询患者信息
|
||||
@@ -14,16 +14,16 @@ export function getOutpatientRegistrationList(query) {
|
||||
return request({
|
||||
url: '/charge-manage/register/patient-metadata',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// 查询费用性质
|
||||
export function getContractList() {
|
||||
return request({
|
||||
url: '/app-common/contract-list',
|
||||
method: 'get'
|
||||
})
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
// 查询诊断信息
|
||||
@@ -31,8 +31,8 @@ export function getConditionDefinitionMetadata(query) {
|
||||
return request({
|
||||
url: '/charge-manage/register/condition-definition-metadata',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// // 查询就诊位置
|
||||
@@ -49,8 +49,8 @@ export function getLocationTree(query) {
|
||||
return request({
|
||||
url: '/charge-manage/register/org-list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// 根据位置id筛选医生
|
||||
@@ -58,8 +58,8 @@ export function getPractitionerMetadata(query) {
|
||||
return request({
|
||||
url: '/charge-manage/register/practitioner-metadata',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// 根据机构id筛选服务项目
|
||||
@@ -67,8 +67,8 @@ export function getHealthcareMetadata(query) {
|
||||
return request({
|
||||
url: '/charge-manage/register/healthcare-metadata',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// 门诊挂号查询
|
||||
@@ -76,8 +76,8 @@ export function getOutpatientRegistrationCurrent(query) {
|
||||
return request({
|
||||
url: '/charge-manage/register/current-day-encounter',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
// 新增门诊挂号信息
|
||||
@@ -85,8 +85,8 @@ export function addOutpatientRegistration(data) {
|
||||
return request({
|
||||
url: '/payment/payment/reg-pre-pay',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
// 新增病人信息
|
||||
@@ -94,83 +94,79 @@ export function addPatient(data) {
|
||||
return request({
|
||||
url: '/patient-manage/information/patient-information',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export function listmaritalstatus() {
|
||||
return request({
|
||||
url: '/patientmanage/information/list-maritalstatus',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function listoccupationtype() {
|
||||
return request({
|
||||
url: '/patientmanage/information/list-occupationtype',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function lisadministrativegender() {
|
||||
return request({
|
||||
url: '/patientmanage/information/list-administrativegender',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function listbloodtypeabo() {
|
||||
return request({
|
||||
url: '/patientmanage/information/list-bloodtypeabo',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export function listbloodtypearh() {
|
||||
return request({
|
||||
url: '/patientmanage/information/list-bloodtypearh',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function listfamilyrelationshiptype() {
|
||||
return request({
|
||||
url: '/patientmanage/information/list-familyrelationshiptype',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
return request({
|
||||
url: '/patientmanage/information/list-familyrelationshiptype',
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
// 查询患者相关
|
||||
export function patientlLists() {
|
||||
return request({
|
||||
url: '/patient-manage/information/init',
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
// 查询患者相关
|
||||
export function patientlLists() {
|
||||
return request({
|
||||
url: '/patient-manage/information/init',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
// 患者退号
|
||||
export function returnRegister(encounterId) {
|
||||
return request({
|
||||
url: '/charge-manage/register/return?encounterId=' + encounterId,
|
||||
method: 'put',
|
||||
});
|
||||
}
|
||||
|
||||
// 患者退号
|
||||
export function returnRegister(encounterId) {
|
||||
return request({
|
||||
url: '/charge-manage/register/return?encounterId=' + encounterId,
|
||||
method: 'put'
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 收费
|
||||
*/
|
||||
export function savePayment(data) {
|
||||
return request({
|
||||
url: '/payment/payment/reg-pay',
|
||||
method: 'post',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 收费
|
||||
*/
|
||||
export function savePayment(data) {
|
||||
return request({
|
||||
url: '/payment/payment/reg-pay',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 收费预结算
|
||||
*/
|
||||
@@ -178,8 +174,8 @@ export function precharge(data) {
|
||||
return request({
|
||||
url: '/payment/payment/precharge',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -189,8 +185,20 @@ export function refund(data) {
|
||||
return request({
|
||||
url: '/payment/payment/uncharge',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 退费预检(挂号预取消)
|
||||
* GET /payment/payment/pre-cancel-reg?encounterId=xxx
|
||||
*/
|
||||
export function preCancelReg(encounterId) {
|
||||
return request({
|
||||
url: '/payment/payment/pre-cancel-reg',
|
||||
method: 'get',
|
||||
params: { encounterId },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,8 +208,8 @@ export function cancelRegister(data) {
|
||||
return request({
|
||||
url: '/charge-manage/register/return',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -211,6 +219,28 @@ export function gerPreInfo(userMaessage) {
|
||||
return request({
|
||||
url: '/yb-request/per-info',
|
||||
method: 'post',
|
||||
params: userMaessage
|
||||
})
|
||||
}
|
||||
params: userMaessage,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付
|
||||
*/
|
||||
export function wxPay(data) {
|
||||
return request({
|
||||
url: '/three-part/pay/pay-for',
|
||||
method: 'post',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付
|
||||
*/
|
||||
export function WxPayResult(data) {
|
||||
return request({
|
||||
url: '/three-part/pay/pay-query',
|
||||
method: 'get',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7,57 +7,40 @@
|
||||
destroy-on-close
|
||||
@close="close"
|
||||
>
|
||||
<div>
|
||||
<div v-loading="loading">
|
||||
<el-text size="large" style="display: block; margin-bottom: 15px">
|
||||
退费日期:{{ currentDate }}
|
||||
</el-text>
|
||||
<el-text size="large">费用性质:{{ '自费' }}</el-text>
|
||||
<el-text size="large">费用性质:{{ props.category || '自费' }}</el-text>
|
||||
<div class="amount-row">
|
||||
<el-text size="large">应退金额:</el-text>
|
||||
<el-text size="large" type="primary" class="amount">
|
||||
{{ props.totalAmount.toFixed(2) + ' 元' }}
|
||||
{{ (calculatedTotalAmount || 0) + ' 元' }}
|
||||
</el-text>
|
||||
</div>
|
||||
<div class="amount-row" v-if="calculatedReturnAmount > 0">
|
||||
<el-text size="large">退费金额:</el-text>
|
||||
<el-text size="large" type="primary" class="amount">
|
||||
{{ (calculatedReturnAmount || 0) + ' 元' }}
|
||||
</el-text>
|
||||
</div>
|
||||
|
||||
<!-- 自费支付 -->
|
||||
<!-- 退费方式列表(从接口数据中筛选) -->
|
||||
<div class="payment-container">
|
||||
<div v-for="(item, index) in formData.selfPay" :key="index" class="payment-item">
|
||||
<div v-for="(item, index) in refundMethodsFromApi" :key="index" class="payment-item">
|
||||
<span>退费方式:</span>
|
||||
<el-select
|
||||
v-model="item.payEnum"
|
||||
placeholder="选择退费方式"
|
||||
style="width: 160px"
|
||||
@change="clearAmount(index)"
|
||||
>
|
||||
<el-option
|
||||
v-for="payEnum in selfPayMethods"
|
||||
:key="payEnum.value"
|
||||
:label="payEnum.label"
|
||||
:value="payEnum.value"
|
||||
:disabled="isMethodDisabled(payEnum.value)"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input :value="getPayMethodLabel(item.payEnum)" readonly style="width: 160px" />
|
||||
<span>退费金额:</span>
|
||||
<div class="suffix-wrapper">
|
||||
<el-input-number
|
||||
v-model="item.amount"
|
||||
:model-value="(Number(item.amount) || 0) - (Number(item.returnAmount) || 0)"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:max="getMax(index)"
|
||||
:controls="false"
|
||||
placeholder="金额"
|
||||
disabled
|
||||
class="amount-input"
|
||||
@change="handleAmountChange"
|
||||
/>
|
||||
<span class="suffix-text">元</span>
|
||||
</div>
|
||||
<el-button
|
||||
type="danger"
|
||||
circle
|
||||
:icon="Delete"
|
||||
@click="removePayment(index)"
|
||||
v-if="index > 0"
|
||||
/>
|
||||
</div>
|
||||
<div class="payment-container" style="position: relative">
|
||||
<span style="position: absolute; top: 5px">退费原因:</span>
|
||||
@@ -67,29 +50,26 @@
|
||||
v-model="reason"
|
||||
placeholder="退费原因"
|
||||
class="reason-textarea"
|
||||
@change="handleAmountChange"
|
||||
/>
|
||||
</div>
|
||||
<div class="add-payment">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="addPayment"
|
||||
:disabled="formData.selfPay.length >= 4 || remainingAmount <= 0"
|
||||
>
|
||||
<!-- 添加退费方式功能暂时注释 -->
|
||||
<!-- <div class="add-payment">
|
||||
<el-button type="primary" plain @click="addPayment" :disabled="canAddPayment">
|
||||
添加退费方式
|
||||
</el-button>
|
||||
<el-text v-if="remainingAmount <= 0" type="danger" class="tip">
|
||||
金额已满足应退,不可继续添加
|
||||
<el-text v-if="canAddPayment" type="danger" class="tip">
|
||||
退费金额已等于应退金额,不可继续添加
|
||||
</el-text>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<!-- 金额汇总 -->
|
||||
<div class="summary">
|
||||
<el-space :size="30">
|
||||
<div class="summary-item">
|
||||
<el-text type="info">实退合计:</el-text>
|
||||
<el-text type="success">{{ displayAmount + ' 元' }}</el-text>
|
||||
<el-text type="success">{{
|
||||
displayAmount > 0 ? displayAmount + ' 元' : props.totalAmount + ' 元'
|
||||
}}</el-text>
|
||||
</div>
|
||||
<!-- <div class="summary-item">
|
||||
<el-text type="info">应找零:</el-text>
|
||||
@@ -97,6 +77,28 @@
|
||||
</div> -->
|
||||
</el-space>
|
||||
</div>
|
||||
|
||||
<!-- 退费明细表格 -->
|
||||
<div v-if="preCancelData && preCancelData.length > 0" class="pre-cancel-table-wrapper">
|
||||
<el-table :data="preCancelData" border stripe max-height="300" style="width: 100%">
|
||||
<el-table-column prop="payEnum_dictText" label="支付方式" min-width="200" />
|
||||
<el-table-column prop="amount" label="金额" width="120" align="right">
|
||||
<template #default="{ row }">
|
||||
{{ row.amount ? Number(row.amount) : '0.00' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="returnAmount" label="退费金额" width="120" align="right">
|
||||
<template #default="{ row }">
|
||||
{{ row.returnAmount ? Number(row.returnAmount) : '0.00' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="chargeAmount" label="收费金额" min-width="120" align="right">
|
||||
<template #default="{ row }">
|
||||
{{ row.chargeAmount ? Number(row.chargeAmount) : '0.00' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
@@ -108,7 +110,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { cancelRegister } from './outpatientregistration';
|
||||
import { cancelRegister, preCancelReg } from './outpatientregistration';
|
||||
import { computed, watch, reactive, ref, getCurrentInstance } from 'vue';
|
||||
import { Delete } from '@element-plus/icons-vue';
|
||||
|
||||
@@ -139,6 +141,8 @@ const props = defineProps({
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const reason = ref('');
|
||||
const preCancelData = ref([]);
|
||||
const loading = ref(false);
|
||||
|
||||
const formData = reactive({
|
||||
totalAmount: 0,
|
||||
@@ -160,13 +164,51 @@ watch(
|
||||
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
watch(
|
||||
() => props.open,
|
||||
async (val) => {
|
||||
if (val && props.patientInfo && props.patientInfo.encounterId) {
|
||||
loading.value = true;
|
||||
try {
|
||||
const res = await preCancelReg(props.patientInfo.encounterId);
|
||||
if (res && res.code === 200 && res.data) {
|
||||
preCancelData.value = res.data;
|
||||
// 计算应退金额并更新表单数据
|
||||
const targetPayEnums = [220500, 220400, 220100, 220200, 220300];
|
||||
const sum = res.data
|
||||
.filter((item) => targetPayEnums.includes(item.payEnum))
|
||||
.reduce((total, item) => total + (Number(item.amount) || 0), 0);
|
||||
if (sum > 0) {
|
||||
formData.totalAmount = sum;
|
||||
// 如果第一个退费方式的金额为0或等于原来的totalAmount,则自动填充
|
||||
if (
|
||||
formData.selfPay[0].amount === 0 ||
|
||||
formData.selfPay[0].amount === props.totalAmount
|
||||
) {
|
||||
formData.selfPay[0].amount = sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('pre-cancel-reg error', err);
|
||||
preCancelData.value = [];
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
} else {
|
||||
preCancelData.value = [];
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
function submit() {
|
||||
console.log(props.chargeItemIds);
|
||||
|
||||
if (parseFloat(displayAmount.value) < formData.totalAmount) {
|
||||
proxy.$modal.msgError('请输入正确的金额');
|
||||
return;
|
||||
}
|
||||
// if (parseFloat(displayAmount.value) < formData.totalAmount) {
|
||||
// proxy.$modal.msgError('请输入正确的金额');
|
||||
// return;
|
||||
// }
|
||||
cancelRegister({
|
||||
paymentEnum: 0,
|
||||
kindEnum: 1,
|
||||
@@ -195,23 +237,16 @@ const selfPayMethods = [
|
||||
{ label: '银联', value: 220300 },
|
||||
];
|
||||
|
||||
// 计算剩余可输入金额
|
||||
const remainingAmount = computed(() => {
|
||||
return (
|
||||
formData.totalAmount - formData.selfPay.reduce((sum, item) => sum + Number(item.amount), 0)
|
||||
);
|
||||
});
|
||||
|
||||
// 获取单个支付方式的最大可输入金额
|
||||
const getMax = (index) => {
|
||||
const otherSum = formData.selfPay.reduce(
|
||||
(sum, item, i) => (i !== index ? sum + Number(item.amount) : sum),
|
||||
(sum, item, i) => (i !== index ? sum + (Number(item.amount) || 0) : sum),
|
||||
0
|
||||
);
|
||||
const maxAmount = calculatedTotalAmount.value - otherSum;
|
||||
if (formData.selfPay[index].payEnum == 220400) {
|
||||
return formData.totalAmount + 100 - otherSum;
|
||||
return maxAmount + 100;
|
||||
}
|
||||
return formData.totalAmount - otherSum;
|
||||
return maxAmount;
|
||||
};
|
||||
|
||||
// 检查支付方式是否已使用
|
||||
@@ -224,10 +259,11 @@ const handleAmountChange = () => {
|
||||
};
|
||||
|
||||
const addPayment = () => {
|
||||
if (remainingAmount.value <= 0) {
|
||||
if (canAddPayment.value) {
|
||||
return;
|
||||
}
|
||||
formData.selfPay.push({ payEnum: '', amount: remainingAmount.value });
|
||||
// 添加新的退费方式,初始金额为0,由用户输入
|
||||
formData.selfPay.push({ payEnum: '', amount: 0 });
|
||||
};
|
||||
|
||||
const removePayment = (index) => {
|
||||
@@ -238,9 +274,16 @@ const clearAmount = (index) => {
|
||||
// formData.selfPay[index].amount = 0;
|
||||
};
|
||||
|
||||
// 计算属性
|
||||
// 计算属性 - 实退合计(使用接口返回的退费方式数据)
|
||||
const displayAmount = computed(() => {
|
||||
return formData.selfPay.reduce((sum, item) => sum + (Number(item.amount) || 0), 0).toFixed(2);
|
||||
if (!preCancelData.value || preCancelData.value.length === 0) {
|
||||
return '0.00';
|
||||
}
|
||||
const targetPayEnums = [220500, 220400, 220100, 220200, 220300];
|
||||
const sum = preCancelData.value
|
||||
.filter((item) => targetPayEnums.includes(item.payEnum))
|
||||
.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
|
||||
return sum.toFixed(2);
|
||||
});
|
||||
|
||||
const returnedAmount = computed(() => {
|
||||
@@ -252,6 +295,72 @@ const returnedAmount = computed(() => {
|
||||
return returned >= 0 ? returned.toFixed(2) : '0.00';
|
||||
});
|
||||
|
||||
const calculatedTotalAmount = computed(() => {
|
||||
if (!preCancelData.value || preCancelData.value.length === 0) {
|
||||
return props.totalAmount || 0;
|
||||
}
|
||||
const targetPayEnums = [220500, 220400, 220100, 220200, 220300];
|
||||
// 应退金额 = (amount - returnAmount) 的总和,即剩余应退金额
|
||||
const sum = preCancelData.value
|
||||
.filter((item) => targetPayEnums.includes(item.payEnum))
|
||||
.reduce(
|
||||
(total, item) => total + ((Number(item.amount) || 0) - (Number(item.returnAmount) || 0)),
|
||||
0
|
||||
);
|
||||
return sum > 0 ? sum : props.totalAmount || 0;
|
||||
});
|
||||
|
||||
const calculatedReturnAmount = computed(() => {
|
||||
if (!preCancelData.value || preCancelData.value.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
const targetPayEnums = [220500, 220400, 220100, 220200, 220300];
|
||||
const sum = preCancelData.value
|
||||
.filter((item) => targetPayEnums.includes(item.payEnum))
|
||||
.reduce((total, item) => total + (Number(item.returnAmount) || 0), 0);
|
||||
return sum || 0;
|
||||
});
|
||||
|
||||
// 从接口数据中筛选符合条件的退费方式
|
||||
const refundMethodsFromApi = computed(() => {
|
||||
if (!preCancelData.value || preCancelData.value.length === 0) {
|
||||
return [];
|
||||
}
|
||||
const targetPayEnums = [220500, 220400, 220100, 220200, 220300];
|
||||
return preCancelData.value.filter(
|
||||
(item) =>
|
||||
targetPayEnums.includes(item.payEnum) &&
|
||||
item.payEnum_dictText &&
|
||||
item.payEnum_dictText.trim() !== ''
|
||||
);
|
||||
});
|
||||
|
||||
// 根据 payEnum 获取支付方式标签
|
||||
const getPayMethodLabel = (payEnum) => {
|
||||
const method = selfPayMethods.find((m) => m.value === payEnum);
|
||||
if (method) {
|
||||
return method.label;
|
||||
}
|
||||
// 如果找不到,尝试从接口返回的 dictText 中获取
|
||||
const apiItem = preCancelData.value?.find((item) => item.payEnum === payEnum);
|
||||
return apiItem?.payEnum_dictText || `支付方式${payEnum}`;
|
||||
};
|
||||
|
||||
// 计算所有退费方式的总和
|
||||
const totalRefundAmount = computed(() => {
|
||||
return refundMethodsFromApi.value.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
|
||||
});
|
||||
|
||||
// 计算剩余可输入金额(应退金额 - 已输入的退费金额总和)
|
||||
const remainingAmount = computed(() => {
|
||||
return calculatedTotalAmount.value - totalRefundAmount.value;
|
||||
});
|
||||
|
||||
// 判断是否可以添加退费方式:退费金额总和等于或大于应退金额时不能添加
|
||||
const canAddPayment = computed(() => {
|
||||
return totalRefundAmount.value >= calculatedTotalAmount.value || formData.selfPay.length >= 10;
|
||||
});
|
||||
|
||||
function close() {
|
||||
emit('close');
|
||||
}
|
||||
@@ -361,4 +470,21 @@ function close() {
|
||||
.amount-input .el-input__inner {
|
||||
padding-right: 30px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
.pre-cancel-table-wrapper {
|
||||
margin-top: 20px;
|
||||
width: 100%;
|
||||
border: 1px solid #dcdfe6;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
|
||||
:deep(.el-table) {
|
||||
width: 100%;
|
||||
|
||||
.el-table__body-wrapper {
|
||||
max-height: 300px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -730,9 +730,9 @@ const data = reactive({
|
||||
serviceTypeId: [{ required: true, message: '挂号类型不能为空', trigger: 'blur' }],
|
||||
organizationId: [{ required: true, message: '优先级不能为空', trigger: 'blur' }],
|
||||
orgId: [{ required: true, message: '就诊科室不能为空', trigger: 'blur' }],
|
||||
// practitionerId: [
|
||||
// { required: true, message: "医生不能为空", trigger: "blur" },
|
||||
// ],
|
||||
practitionerId: [
|
||||
{ required: true, message: "医生不能为空", trigger: "blur" },
|
||||
],
|
||||
typeCode: [{ required: true, message: '账户类型不能为空', trigger: 'blur' }],
|
||||
definitionId: [{ required: true, message: '费用定价不能为空', trigger: 'blur' }],
|
||||
// totalPrice: [{ required: true, message: "总价不能为空", trigger: "blur" }],
|
||||
@@ -1146,7 +1146,23 @@ function handleAdd() {
|
||||
transformedData.value = transformFormData(form.value);
|
||||
console.log(transformedData, 'transformedData门诊挂号');
|
||||
chargeItemIdList.value = [];
|
||||
patientInfo.value.patientId = form.value.patientId;
|
||||
// patientInfo.value.patientId = form.value.patientId;
|
||||
patientInfo.value = {
|
||||
patientId: form.value.patientId,
|
||||
patientName: form.value.name,
|
||||
genderEnum_enumText: form.value.genderEnum_enumText,
|
||||
age: form.value.age,
|
||||
contractName: form.value.contractNo
|
||||
? contractList.value.find((item) => item.busNo === form.value.contractNo)?.contractName ||
|
||||
'自费'
|
||||
: '自费',
|
||||
idCard: form.value.idCard,
|
||||
phone: form.value.phone,
|
||||
categoryEnum: form.value.categoryEnum || '门诊',
|
||||
organizationName: form.value.locationId_dictText || '',
|
||||
practitionerName: form.value.doctorName || '',
|
||||
healthcareName: '', // 可根据实际情况补充
|
||||
};
|
||||
proxy.$refs['outpatientRegistrationRef'].validate((valid) => {
|
||||
if (valid) {
|
||||
readCardLoading.value = true;
|
||||
@@ -1157,10 +1173,13 @@ function handleAdd() {
|
||||
addOutpatientRegistration(transformedData.value)
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
console.log('78989798', 'res', res);
|
||||
// proxy.$modal.msgSuccess('挂号成功');
|
||||
chrgBchno.value = res.data.chrgBchno;
|
||||
registerBusNo.value = res.data.busNo;
|
||||
totalAmount.value = res.data.psnCashPay;
|
||||
patientInfo.value.encounterId = res.data.encounterId || '';
|
||||
patientInfo.value.busNo = res.data.busNo || '';
|
||||
readCardLoading.value = false;
|
||||
openDialog.value = true;
|
||||
// chargeItemIdList.value = res.data;
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request';
|
||||
import { dateEquals } from 'element-plus';
|
||||
|
||||
// 获取网银支付参数列表
|
||||
export function getList (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/page',
|
||||
method: 'get',
|
||||
params:data,
|
||||
});
|
||||
}
|
||||
|
||||
export function getPayinfo (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/pay-query?paymentId='+data.paymentId,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
export function returnfee (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/return-bill?paymentId='+data.paymentId,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
export function returnFeednext (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/return-goods?paymentId='+data.paymentId,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
export function returnResult (data) {
|
||||
return request ({
|
||||
url: '/three-part/pay/return-query?id='+data.id,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
119
openhis-ui-vue3/src/views/charge/threePayRecord/index.vue
Normal file
119
openhis-ui-vue3/src/views/charge/threePayRecord/index.vue
Normal file
@@ -0,0 +1,119 @@
|
||||
<template>
|
||||
<div class="app-continer">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true">
|
||||
<el-form-item label="患者姓名" prop="patientName">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="请输入患者姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table :data="recordList" v-loading="loading" border ref="tableRef">
|
||||
<el-table-column label="患者姓名" align="center" prop="patientName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="支付单号" align="center" prop="paymentBusNo" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="交易金额(元)" align="right" prop="txnAmt" header-align="center" width="100"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column label="交易类型" align="center" prop="tranType" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="支付方式" align="center" prop="payType" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="交易时间" align="center" prop="txnTime" :show-overflow-tooltip="true">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.txnTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="原交易类型" align="center" prop="orgTranType" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="原交易类型" align="center" prop="orgTranType" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="第三方优惠说明" align="center" prop="otherMsg" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="错误信息" align="center" prop="errMsg" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="查询结果" align="center" prop="queryResult" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="查询结果说明" align="center" prop="queryResultMsg" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="操作" align="center" prop="paymentEnum_enumText" width="340">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" link :disabled="!scope.row.paymentId"
|
||||
@click="getPayInfo(scope.row.paymentId)">支付结果查询</el-button>
|
||||
<el-button type="warning" link :disabled="!scope.row.paymentId"
|
||||
@click="returnFee(scope.row.paymentId)">退费</el-button>
|
||||
<el-button type="danger" link auto-insert-space :disabled="!scope.row.paymentId"
|
||||
@click="returnFeeNext(scope.row.paymentId)">隔天退费</el-button>
|
||||
<el-button type="success" link @click="returnFeeResultQuery(scope.row.id)">退费结果查询</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getLists" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="ClinicRecord">
|
||||
const { proxy } = getCurrentInstance();
|
||||
import { getList, getPayinfo, returnfee, returnFeednext, returnResult } from './components/api.js';
|
||||
const total = ref(0);
|
||||
const queryParams = ref({
|
||||
pageNo: 1,
|
||||
pageSize: 100,
|
||||
searchKey: '',
|
||||
});
|
||||
const recordList = ref([]);
|
||||
const loading = ref(false);
|
||||
const getPayInfo = (paymentId) => {
|
||||
console
|
||||
getPayinfo({ paymentId }).then((res) => {
|
||||
proxy.$message.success('支付结果查询成功');
|
||||
console.log(res);
|
||||
});
|
||||
};
|
||||
const returnFee = (paymentId) => {
|
||||
returnfee({ paymentId }).then((res) => {
|
||||
proxy.$message.success('退费成功');
|
||||
console.log(res);
|
||||
});
|
||||
};
|
||||
const returnFeeNext = (paymentId) => {
|
||||
returnFeednext({ paymentId }).then((res) => {
|
||||
proxy.$message.success('隔天退费成功');
|
||||
console.log(res);
|
||||
});
|
||||
};
|
||||
const returnFeeResultQuery = (id) => {
|
||||
returnResult({ id }).then((res) => {
|
||||
proxy.$message.success(res.data);
|
||||
console.log(res);
|
||||
});
|
||||
};
|
||||
const handleQuery = () => {
|
||||
//queryParams.value.pageNum = 1;
|
||||
getList(queryParams.value);
|
||||
};
|
||||
const resetQuery = () => {
|
||||
proxy.resetForm('queryRef');
|
||||
handleQuery();
|
||||
};
|
||||
const getLists = async () => {
|
||||
loading.value = true;
|
||||
getList(queryParams.value).then((res) => {
|
||||
loading.value = false;
|
||||
recordList.value = res.data.records;
|
||||
total.value = res.data.total;
|
||||
});
|
||||
};
|
||||
getLists();
|
||||
</script>
|
||||
<style scoped>
|
||||
.app-continer {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.el-dialog {
|
||||
height: 90vh !important;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.el-textarea__inner {
|
||||
resize: none;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -357,7 +357,7 @@ async function print() {
|
||||
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
|
||||
nickName: userStore.nickName,
|
||||
orgName: userStore.orgName,
|
||||
fixmedinsName: '长春大学医院',
|
||||
fixmedinsName: '长春市朝阳区中医院医院',
|
||||
queryTime: queryTime.value[0] + '~' + queryTime.value[1],
|
||||
zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0),
|
||||
feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0)
|
||||
@@ -433,4 +433,4 @@ getPharmacyCabinetLists();
|
||||
.el-col {
|
||||
margin-right: 50px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -218,13 +218,13 @@
|
||||
<el-col :span="5">
|
||||
<span class="label">省医保人次:</span>
|
||||
<span class="value">
|
||||
{{ reportValue['229900reg'] ? reportValue['229900reg'] + ' 人' : '0 人' }}
|
||||
{{ reportValue['229900reg'] ? reportValue['229900reg'] + '人' : '0 人' }}
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<span class="label">市医保人次:</span>
|
||||
<span class="value">
|
||||
{{ reportValue['220100reg'] ? reportValue['220100reg'] + ' 人' : '0 人' }}
|
||||
{{ (reportValue['220100reg'] || 0) + (reportValue['220199reg'] || 0) + ' 人' }}
|
||||
</span>
|
||||
</el-col>
|
||||
<!-- <el-col :span="5">
|
||||
@@ -273,19 +273,27 @@
|
||||
>
|
||||
<el-col :span="5">
|
||||
<span class="label">市医保现金:</span>
|
||||
<span class="value">{{ formatValue(reportValue['220100cash']) }}</span>
|
||||
<span class="value">{{
|
||||
formatValue((reportValue['220100cash'] || 0) + (reportValue['220199cash'] || 0))
|
||||
}}</span>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<span class="label">市医保统筹:</span>
|
||||
<span class="value">{{ formatValue(reportValue['220100tcSum']) }}</span>
|
||||
<span class="value">{{
|
||||
formatValue((reportValue['220100tcSum'] || 0) + (reportValue['220199tcSum'] || 0))
|
||||
}}</span>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<span class="label">市医保账户:</span>
|
||||
<span class="value">{{ formatValue(reportValue['220100zhSum']) }}</span>
|
||||
<span class="value">{{
|
||||
formatValue((reportValue['220100zhSum'] || 0) + (reportValue['220199zhSum'] || 0))
|
||||
}}</span>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<span class="label">市医保基金:</span>
|
||||
<span class="value">{{ formatValue(reportValue['220100fundSum']) }}</span>
|
||||
<span class="value">{{
|
||||
formatValue((reportValue['220100fundSum'] || 0) + (reportValue['220199fundSum'] || 0))
|
||||
}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row
|
||||
@@ -329,6 +337,7 @@
|
||||
{{
|
||||
formatValue(
|
||||
(reportValue['220100cash'] || 0) +
|
||||
(reportValue['220199cash'] || 0) +
|
||||
(reportValue['229900cash'] || 0) +
|
||||
(reportValue['0000cash'] || 0)
|
||||
)
|
||||
@@ -443,16 +452,33 @@ function processObjectWithFinType(obj) {
|
||||
async function print() {
|
||||
// const selectedRows = proxy.$refs['tableRef'].getSelectionRows();
|
||||
console.log(reportValue.value, '==reportValue.value==');
|
||||
// 计算市医保相关字段
|
||||
const municipalYbReg =
|
||||
(reportValue.value['220100reg'] || 0) + (reportValue.value['220199reg'] || 0);
|
||||
const municipalYbCash =
|
||||
(reportValue.value['220100cash'] || 0) + (reportValue.value['220199cash'] || 0);
|
||||
const municipalYbTcSum =
|
||||
(reportValue.value['220100tcSum'] || 0) + (reportValue.value['220199tcSum'] || 0);
|
||||
const municipalYbZhSum =
|
||||
(reportValue.value['220100zhSum'] || 0) + (reportValue.value['220199zhSum'] || 0);
|
||||
const municipalYbFundSum =
|
||||
(reportValue.value['220100fundSum'] || 0) + (reportValue.value['220199fundSum'] || 0);
|
||||
const municipalYbTotal = municipalYbZhSum + municipalYbFundSum;
|
||||
const totalCash =
|
||||
municipalYbCash + (reportValue.value['229900cash'] || 0) + (reportValue.value['0000cash'] || 0);
|
||||
|
||||
const result = {
|
||||
data: [
|
||||
{
|
||||
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
|
||||
nickName: userStore.nickName,
|
||||
orgName: userStore.orgName,
|
||||
fixmedinsName: userStore.hospitalName,
|
||||
fixmedinsName: userStore.hospitalName,
|
||||
createTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'),
|
||||
scheduler: userStore.nickName,
|
||||
timeRange: queryTime.value[0] + '~' + queryTime.value[1],
|
||||
|
||||
// 计算字段
|
||||
zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0),
|
||||
feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0)
|
||||
.add(reportValue.value.CHECK_FEE || 0)
|
||||
@@ -465,14 +491,23 @@ async function print() {
|
||||
.add(reportValue.value.REGISTRATION_FEE || 0)
|
||||
.add(reportValue.value.OTHER_FEE || 0)
|
||||
.add(reportValue.value.SANITARY_MATERIALS_FEE || 0),
|
||||
|
||||
// 省医保相关
|
||||
provinceYbTotal:
|
||||
(reportValue.value['229900zhSum'] || 0) + (reportValue.value['229900fundSum'] || 0),
|
||||
municipalYbTotal:
|
||||
(reportValue.value['220100zhSum'] || 0) + (reportValue.value['220100fundSum'] || 0),
|
||||
totalCash:
|
||||
(reportValue.value['220100cash'] || 0) +
|
||||
(reportValue.value['229900cash'] || 0) +
|
||||
(reportValue.value['0000cash'] || 0),
|
||||
(reportValue.value['229900fundSum'] || 0) + (reportValue.value['229900zhSum'] || 0),
|
||||
|
||||
// 市医保相关(220100和220199)
|
||||
municipalYbReg,
|
||||
municipalYbCash,
|
||||
municipalYbTcSum,
|
||||
municipalYbZhSum,
|
||||
municipalYbFundSum,
|
||||
municipalYbTotal,
|
||||
|
||||
// 现金收入总额
|
||||
totalCash,
|
||||
|
||||
// 体检人次
|
||||
physicalExaminationCount: getPhysicalExaminationCount(),
|
||||
},
|
||||
],
|
||||
@@ -546,4 +581,4 @@ function formatValue(value) {
|
||||
background-color: #000;
|
||||
margin: 20px 0;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -92,3 +92,15 @@ export function printBloodCode (query) {
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取本次就诊处方单
|
||||
*/
|
||||
export function getEnPrescriptionInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/main/prescription-page-info',
|
||||
method: 'get',
|
||||
params: data,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -6,8 +6,11 @@
|
||||
"paperType": "A5",
|
||||
"height": 210,
|
||||
"width": 148,
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 592.4409448818898,
|
||||
"paperNumberDisabled": true,
|
||||
"paperNumberContinue": true,
|
||||
"expandCss": "",
|
||||
"overPrintOptions": {
|
||||
"content": "",
|
||||
"opacity": 0.7,
|
||||
@@ -24,20 +27,19 @@
|
||||
"format": "YYYY-MM-DD HH:mm"
|
||||
},
|
||||
"panelLayoutOptions": {},
|
||||
"paperHeader": 0,
|
||||
"paperFooter": 841.8897637795277,
|
||||
"printElements": [
|
||||
{
|
||||
"options": {
|
||||
"left": 169.5,
|
||||
"left": 0,
|
||||
"top": 22.5,
|
||||
"height": 12,
|
||||
"width": 88.5,
|
||||
"title": "长春大学医院",
|
||||
"width": 420,
|
||||
"title": "长春市朝阳区中医院医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
"qrCodeLevel": 0
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
@@ -46,15 +48,16 @@
|
||||
},
|
||||
{
|
||||
"options": {
|
||||
"left": 189,
|
||||
"left": 0,
|
||||
"top": 45,
|
||||
"height": 9.75,
|
||||
"width": 42,
|
||||
"width": 420,
|
||||
"title": "处置单",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 11.25,
|
||||
"qrCodeLevel": 0
|
||||
"qrCodeLevel": 0,
|
||||
"textAlign": "center"
|
||||
},
|
||||
"printElementType": {
|
||||
"title": "文本",
|
||||
@@ -331,4 +334,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
@close="close"
|
||||
>
|
||||
<el-table :data="recordList" highlight-current-row max-height="650" style="width: 100%" border>
|
||||
<el-table-column prop="occurrenceTime" label="执行时间" align="center" />
|
||||
<el-table-column prop="recordTime" label="执行时间" align="center" />
|
||||
<el-table-column prop="statusEnum_enumText" label="执行状态" align="center" />
|
||||
<el-table-column prop="orgName" label="执行科室" align="center" />
|
||||
<el-table-column prop="practitionerName" label="执行人" align="center" />
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"top": 16.5,
|
||||
"height": 22.5,
|
||||
"width": 120,
|
||||
"title": "长春大学医院",
|
||||
"title": "长春市朝阳区中医院医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontFamily": "Microsoft YaHei",
|
||||
@@ -637,4 +637,4 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,8 +50,9 @@
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
@pagination="getPatientList"
|
||||
:pager-count="1"
|
||||
:layout="'total, prev, pager, next'"
|
||||
/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -96,6 +97,13 @@
|
||||
>
|
||||
打印处置单
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click.stop="getEnPrescription()"
|
||||
>
|
||||
处方单
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6">
|
||||
<el-form
|
||||
@@ -301,6 +309,11 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
<PerformRecordDialog :open="openDialog" :recordList="recordList" @close="openDialog = false" />
|
||||
<PrescriptionInfo
|
||||
:open="openPrescriptionDialog"
|
||||
:precriptionInfo="prescriptionInfo"
|
||||
@close="openPrescriptionDialog = false"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -311,20 +324,24 @@ import {
|
||||
getDisposalList,
|
||||
execute,
|
||||
cancel,
|
||||
getEnPrescriptionInfo,
|
||||
getPerformRecord,
|
||||
listWesternmedicine,
|
||||
printBloodCode,
|
||||
} from './components/api';
|
||||
import PerformRecordDialog from './components/performRecordDialog';
|
||||
import PrescriptionInfo from '../../doctorstation/components/prescription/prescriptionInfo.vue';
|
||||
import templateJson from './components/template.json';
|
||||
import prescriptionTemplate from './components/prescriptionTemplate.json';
|
||||
import bloodTemplate from './components/bloodTemplate.json';
|
||||
import disposalTemplate from './components/disposalTemplate.json';
|
||||
import { advicePrint, getAdjustPriceSwitchState, lotNumberMatch } from '@/api/public';
|
||||
import { formatDateStr } from '@/utils';
|
||||
import { hiprint } from 'vue-plugin-hiprint';
|
||||
import { advicePrint } from '@/api/public';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import { getGroupMarkers } from '@/utils/his';
|
||||
|
||||
import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
|
||||
// 患者搜索
|
||||
const queryParams = ref({
|
||||
pageNo: 1,
|
||||
@@ -334,6 +351,10 @@ const receptionTime = ref([
|
||||
formatDateStr(new Date(), 'YYYY-MM-DD'),
|
||||
formatDateStr(new Date(), 'YYYY-MM-DD'),
|
||||
]);
|
||||
|
||||
const openPrescriptionDialog = ref(false);
|
||||
const prescriptionInfo = ref([]);
|
||||
|
||||
const total = ref(0);
|
||||
// 患者数据
|
||||
const patientList = ref([]);
|
||||
@@ -424,6 +445,18 @@ function handleServiceCategoryChange(value) {
|
||||
function handlePatientSelect(row) {
|
||||
loading.value = true;
|
||||
currentPatient.value = row;
|
||||
getAdjustPriceSwitchState().then((res) => {
|
||||
if (res.data) {
|
||||
lotNumberMatch({ encounterIdList: row.encounterId }).then(() => {
|
||||
getAllList(row);
|
||||
});
|
||||
} else {
|
||||
getAllList(row);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getAllList(row) {
|
||||
getDisposalList(row.encounterId).then((res) => {
|
||||
deviceList.value = res.data.records.filter((item) => {
|
||||
return item.requestTable == 'wor_device_request';
|
||||
@@ -440,6 +473,7 @@ function handlePatientSelect(row) {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
// 批量操作校验
|
||||
function handleBatchValidate(type) {
|
||||
let params = [];
|
||||
@@ -642,6 +676,23 @@ function printPrescription() {
|
||||
}); //开始打印
|
||||
});
|
||||
}
|
||||
// 查看本次就诊处方单
|
||||
function getEnPrescription() {
|
||||
getEnPrescriptionInfo({ encounterId: currentPatient.value.encounterId }).then((res) => {
|
||||
console.log('处方单 res', res);
|
||||
let dataArr = res.data.records || [];
|
||||
if (dataArr.length <= 0) {
|
||||
ElMessage({
|
||||
type: 'error',
|
||||
message: '暂无处方单',
|
||||
});
|
||||
return;
|
||||
}
|
||||
prescriptionInfo.value = res.data.records;
|
||||
openPrescriptionDialog.value = true;
|
||||
});
|
||||
}
|
||||
|
||||
// 打印处置单
|
||||
function printDisposal() {
|
||||
let requestIds = deviceActivityList.value
|
||||
@@ -749,7 +800,100 @@ function handleCancel(row) {
|
||||
});
|
||||
}
|
||||
// 打印瓶贴
|
||||
function printBottleLabel() {
|
||||
// function printBottleLabel() {
|
||||
// let result = [];
|
||||
// // 过滤出全部输液药品
|
||||
// let selectRows = activityListRef.value.getSelectionRows();
|
||||
// let printLiist = [];
|
||||
// // 有选中的优先打印选中行,没有的话打印全部的输液药品
|
||||
// if (selectRows.length > 0) {
|
||||
// printLiist = selectRows.filter((item) => {
|
||||
// return item.medCategory == '2' || item.medCategory == '1';
|
||||
// });
|
||||
// } else {
|
||||
// printLiist = activityList.value.filter((item) => {
|
||||
// return item.medCategory == '2' || item.medCategory == '1';
|
||||
// });
|
||||
// }
|
||||
// // 按照groupId分组,但将多天的项目展开为独立项目
|
||||
// let expandedList = [];
|
||||
|
||||
// printLiist.forEach((item) => {
|
||||
// // 如果用药天数大于1,则创建多个项目
|
||||
// if (item.dispensePerDuration && item.dispensePerDuration > 1) {
|
||||
// // 为每一天创建一个项目
|
||||
// for (let i = 0; i < item.dispensePerDuration; i++) {
|
||||
// // 克隆项目并调整数量
|
||||
// const clonedItem = {
|
||||
// ...item,
|
||||
// // 数量除以天数
|
||||
// quantity: item.quantity ? item.quantity / item.dispensePerDuration : item.quantity,
|
||||
// // 可以添加一个字段表示是第几天
|
||||
// dayIndex: i + 1,
|
||||
// totalDays: item.dispensePerDuration,
|
||||
// data: item.itemName + ' ' + item.size + ' ' + item.methodCode_dictText,
|
||||
// };
|
||||
|
||||
// // 获取当前时间做执行日期,如果用药天数大于1,依次累加
|
||||
// const date = new Date();
|
||||
// date.setDate(date.getDate() + i);
|
||||
// clonedItem.performDateTime = formatDateStr(date, 'YYYY-MM-DD');
|
||||
|
||||
// // 将克隆的项目添加到展开列表中,不按groupId分组
|
||||
// expandedList.push(clonedItem);
|
||||
// }
|
||||
// } else {
|
||||
// // 天数为1或没有设置天数,直接使用原项目
|
||||
// item.data = item.itemName + ' ' + item.size + ' ' + item.methodCode_dictText;
|
||||
// expandedList.push(item);
|
||||
// }
|
||||
// });
|
||||
|
||||
// // 重新按groupId分组,但每个展开的项目都是独立的
|
||||
// const groupedByGroupId = expandedList.reduce((acc, item) => {
|
||||
// // 为展开的项目生成新的唯一groupId
|
||||
// const groupId = item.dayIndex
|
||||
// ? `${item.groupId || item.requestId}_day${item.dayIndex}`
|
||||
// : item.groupId || item.requestId;
|
||||
|
||||
// if (!acc[groupId]) {
|
||||
// acc[groupId] = [];
|
||||
// }
|
||||
// acc[groupId].push(item);
|
||||
// return acc;
|
||||
// }, {});
|
||||
// const resultList = Object.values(groupedByGroupId);
|
||||
// console.log(resultList, '23456789');
|
||||
|
||||
// result = resultList.map((item) => {
|
||||
// return {
|
||||
// patientName: currentPatient.value.patientName,
|
||||
// prepareName: userStore.nickName,
|
||||
// genderEnum_enumText: currentPatient.value.genderEnum_enumText,
|
||||
// age: currentPatient.value.age,
|
||||
// date: item[0].performDateTime,
|
||||
// infuseData: item,
|
||||
// };
|
||||
// });
|
||||
// const printElements = templateJson;
|
||||
// var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
|
||||
// console.log(result, '打印机列表');
|
||||
// hiprintTemplate.print2(result, {
|
||||
// // printer: 'Xprinter XP-365B',
|
||||
// height: 210,
|
||||
// width: 148,
|
||||
// });
|
||||
// // 直接打印回调
|
||||
// // 发送任务到打印机成功
|
||||
// hiprintTemplate.on('printSuccess', function (e) {
|
||||
// console.log('打印成功');
|
||||
// });
|
||||
// // 发送任务到打印机失败
|
||||
// hiprintTemplate.on('printError', function (e) {
|
||||
// console.log('打印失败');
|
||||
// });
|
||||
// }
|
||||
async function printBottleLabel() {
|
||||
let result = [];
|
||||
// 过滤出全部输液药品
|
||||
let selectRows = activityListRef.value.getSelectionRows();
|
||||
@@ -795,6 +939,9 @@ function printBottleLabel() {
|
||||
// 天数为1或没有设置天数,直接使用原项目
|
||||
item.data = item.itemName + ' ' + item.size + ' ' + item.methodCode_dictText;
|
||||
expandedList.push(item);
|
||||
//将当前时间传到expandedList中
|
||||
const date = new Date();
|
||||
item.performDateTime = formatDateStr(date, 'YYYY-MM-DD');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -815,6 +962,7 @@ function printBottleLabel() {
|
||||
console.log(resultList, '23456789');
|
||||
|
||||
result = resultList.map((item) => {
|
||||
console.log(item, '111323item');
|
||||
return {
|
||||
patientName: currentPatient.value.patientName,
|
||||
prepareName: userStore.nickName,
|
||||
@@ -824,23 +972,25 @@ function printBottleLabel() {
|
||||
infuseData: item,
|
||||
};
|
||||
});
|
||||
const printElements = templateJson;
|
||||
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
|
||||
console.log(result, '打印机列表');
|
||||
hiprintTemplate.print2(result, {
|
||||
// printer: 'Xprinter XP-365B',
|
||||
height: 210,
|
||||
width: 148,
|
||||
});
|
||||
console.log(result, '打印数据');
|
||||
await simplePrint(PRINT_TEMPLATE.OUTPATIENT_INFUSION, result);
|
||||
// console.log('打印成功');
|
||||
// const printElements = templateJson;
|
||||
// var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
|
||||
// console.log(result, '打印机列表');
|
||||
// hiprintTemplate.print2(result, {
|
||||
// height: 210,
|
||||
// width: 148,
|
||||
// });
|
||||
// 直接打印回调
|
||||
// 发送任务到打印机成功
|
||||
hiprintTemplate.on('printSuccess', function (e) {
|
||||
console.log('打印成功');
|
||||
});
|
||||
// 发送任务到打印机失败
|
||||
hiprintTemplate.on('printError', function (e) {
|
||||
console.log('打印失败');
|
||||
});
|
||||
// hiprintTemplate.on('printSuccess', function (e) {
|
||||
// console.log('打印成功');
|
||||
// });
|
||||
// // 发送任务到打印机失败
|
||||
// hiprintTemplate.on('printError', function (e) {
|
||||
// console.log('打印失败');
|
||||
// });
|
||||
}
|
||||
|
||||
// 选择框改变时的处理
|
||||
@@ -1039,4 +1189,4 @@ function getRecord(row) {
|
||||
:deep(.el-table__body) tr:hover td.no-hover-column {
|
||||
background-color: inherit !important;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -12,6 +12,16 @@
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column label="门诊号" align="center" prop="iptOtpNo" />
|
||||
<el-table-column label="患者姓名" align="center" prop="patnName" />
|
||||
<el-table-column label="身份证号" align="center" prop="certno" />
|
||||
<el-table-column label="诊断名" align="center" prop="conditionName" />
|
||||
<el-table-column
|
||||
label="慢性诊断名"
|
||||
align="center"
|
||||
prop="specialConditionName"
|
||||
width="180"
|
||||
/>
|
||||
|
||||
<el-table-column label="请求数量" align="center" prop="quantity" />
|
||||
<el-table-column label="请求单位" align="center" prop="unitCode" />
|
||||
<el-table-column label="审核状态" align="center" prop="statusEnum_enumText" />
|
||||
@@ -38,8 +48,7 @@
|
||||
<el-table-column label="给药间隔" align="center" prop="dispenseInterval" />
|
||||
<el-table-column label="单次发药数" align="center" prop="dispensePerQuantity" />
|
||||
<el-table-column label="每次发药供应天数" align="center" prop="dispensePerDuration" />
|
||||
<el-table-column label="患者姓名" align="center" prop="patnName" />
|
||||
<el-table-column label="身份证号" align="center" prop="certno" />
|
||||
|
||||
<el-table-column label="开方医生名" align="center" prop="practitionerName" />
|
||||
<el-table-column label="挂号科室" align="center" prop="mdtrtDeptName" />
|
||||
<el-table-column label="开单科室" align="center" prop="prscDeptName" />
|
||||
@@ -53,7 +62,6 @@
|
||||
{{ formatDate(scope.row.prscTime) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="诊断名" align="center" prop="conditionName" />
|
||||
</el-table>
|
||||
<!-- <pagination
|
||||
v-show="total > 0"
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<span>CF0000000001</span>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
<h2>长春大学医院</h2>
|
||||
<h2>长春市朝阳区中医院医院</h2>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
<h3>处方单</h3>
|
||||
@@ -235,4 +235,4 @@ getList();
|
||||
width: 80px;
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -8,32 +8,73 @@
|
||||
</div>
|
||||
</template>
|
||||
<div style="width: 100%">
|
||||
<el-input v-model="queryParams.searchKey" placeholder="搜索患者"
|
||||
style="width: 48%; margin-bottom: 10px; margin-right: 15px" @keyup.enter="getEncounterList">
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索患者"
|
||||
style="width: 48%; margin-bottom: 10px; margin-right: 15px"
|
||||
@keyup.enter="getEncounterList"
|
||||
>
|
||||
<template #append>
|
||||
<el-button icon="Search" @click="getEncounterList" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-select v-model="queryParams.refundEnum" style="width: 48%; margin-bottom: 10px" placeholder="收费状态"
|
||||
@change="getEncounterList">
|
||||
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-select
|
||||
v-model="queryParams.refundEnum"
|
||||
style="width: 48%; margin-bottom: 10px"
|
||||
placeholder="收费状态"
|
||||
@change="getEncounterList"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in statusOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-date-picker v-model="dateRange" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
style="width: 85%; margin-bottom: 10px" value-format="YYYY-MM-DD" placement="bottom"
|
||||
@change="getEncounterList" />
|
||||
<el-button type="primary" @click="getEncounterList" style="margin-bottom: 10px; margin-left: 18px">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
style="width: 85%; margin-bottom: 10px"
|
||||
value-format="YYYY-MM-DD"
|
||||
placement="bottom"
|
||||
@change="getEncounterList"
|
||||
/>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="getEncounterList"
|
||||
style="margin-bottom: 10px; margin-left: 18px"
|
||||
>
|
||||
搜索
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="encounterList" border style="width: 100%" height="calc(100vh - 300px)" highlight-current-row
|
||||
@cell-click="handleGetReturnDrugList">
|
||||
<el-table-column prop="patientName" align="center" label="姓名" width="130" show-overflow-tooltip />
|
||||
<el-table-column prop="genderEnum_enumText" align="center" label="性别" show-overflow-tooltip />
|
||||
<el-table
|
||||
:data="encounterList"
|
||||
border
|
||||
style="width: 100%"
|
||||
height="calc(100vh - 300px)"
|
||||
highlight-current-row
|
||||
@cell-click="handleGetReturnDrugList"
|
||||
>
|
||||
<el-table-column
|
||||
prop="patientName"
|
||||
align="center"
|
||||
label="姓名"
|
||||
width="130"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="genderEnum_enumText"
|
||||
align="center"
|
||||
label="性别"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column align="center" width="140" label="就诊日期" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.receptionTime ? formatDateStr(scope.row.receptionTime, 'YYYY-MM-DD') : '-'
|
||||
}}
|
||||
scope.row.receptionTime ? formatDateStr(scope.row.receptionTime, 'YYYY-MM-DD') : '-'
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="状态" align="center" prop="refundEnum_enumText" /> -->
|
||||
@@ -52,16 +93,35 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-button type="primary" :disabled="!selectedMedicines.length" @click="handleReturnDrug(undefined)"
|
||||
style="margin-bottom: 10px">
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="!selectedMedicines.length"
|
||||
@click="handleReturnDrug(undefined)"
|
||||
style="margin-bottom: 10px"
|
||||
>
|
||||
确认退药
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleScan()" style="margin-bottom: 10px"> 扫码 </el-button>
|
||||
<el-table ref="returnDrugRef" :data="returDrugList" style="width: 100%" height="calc(100vh - 300px)" border
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table
|
||||
ref="returnDrugRef"
|
||||
:data="returDrugList"
|
||||
style="width: 100%"
|
||||
height="calc(100vh - 300px)"
|
||||
border
|
||||
@select="handleSelection"
|
||||
@selection-change="handelSelectRows"
|
||||
:span-method="handelSpanMethod"
|
||||
class="no-hover-table"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column prop="itemName" label="药品名称" show-overflow-tooltip align="center" />
|
||||
<el-table-column prop="totalPrice" label="总价" width="100" align="right" header-align="center">
|
||||
<el-table-column
|
||||
prop="totalPrice"
|
||||
label="总价"
|
||||
width="100"
|
||||
align="right"
|
||||
header-align="center"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{ scope.row.totalPrice ? scope.row.totalPrice.toFixed(2) + ' 元' : '-' }}
|
||||
</template>
|
||||
@@ -74,29 +134,30 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="reqStatus_enumText" label="退药状态" width="100" align="center">
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.reqStatus_enumText == null
|
||||
? scope.row.refundEnum_enumText
|
||||
: scope.row.reqStatus_enumText
|
||||
}}
|
||||
{{ scope.row.refundEnum_enumText }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="waitingQuantity" label="退药数量" width="100" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{
|
||||
scope.row.quantity
|
||||
? Math.abs(scope.row.quantity)
|
||||
: '0' + ' ' + scope.row.unitCode_dictText
|
||||
}}</span>
|
||||
scope.row.quantity
|
||||
? Math.abs(scope.row.quantity) + ' ' + scope.row.unitCode_dictText
|
||||
: '0' + ' ' + scope.row.unitCode_dictText
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="doctorName" label="开单医生" align="center" width="180" />
|
||||
<el-table-column label="操作" width="100" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-popconfirm width="150" hide-after="10" title="操作确认" placement="top-start"
|
||||
@confirm="handleReturnDrug(scope.row)">
|
||||
<el-popconfirm
|
||||
width="150"
|
||||
hide-after="10"
|
||||
title="操作确认"
|
||||
placement="top-start"
|
||||
@confirm="handleReturnDrug(scope.row)"
|
||||
>
|
||||
<template #reference>
|
||||
<el-button type="primary" link :disabled="scope.row.reqStatus != 11">
|
||||
<el-button type="primary" link :disabled="scope.row.refundEnum != 16">
|
||||
退药
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -113,13 +174,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<TraceNoDialog :ypName="ypName" :openDialog="openTraceNoDialog" @submit="submit"
|
||||
@cancel="openTraceNoDialog = false" />
|
||||
<TraceNoDialog
|
||||
:ypName="ypName"
|
||||
:openDialog="openTraceNoDialog"
|
||||
@submit="submit"
|
||||
@cancel="openTraceNoDialog = false"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="ReturnDrug">
|
||||
import { getCurrentInstance } from 'vue';
|
||||
import { getCurrentInstance, nextTick } from 'vue';
|
||||
import { getList, getReturnDrugList, returnDrug, init, itemTraceNo } from './components/api';
|
||||
import { formatDateStr } from '@/utils/index';
|
||||
import { debounce } from 'lodash-es';
|
||||
@@ -128,7 +193,7 @@ import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue';
|
||||
const queryParams = ref({
|
||||
pageSize: 50,
|
||||
pageNum: 1,
|
||||
refundEnum: 5,
|
||||
refundEnum: 16,
|
||||
});
|
||||
const openTraceNo = ref(false);
|
||||
const traceNoList = ref([]);
|
||||
@@ -138,8 +203,10 @@ const encounterId = ref('');
|
||||
const returDrugList = ref([]);
|
||||
const selectedMedicines = ref([]);
|
||||
const statusOptions = ref([]);
|
||||
const dateRange = ref([formatDateStr(new Date(), 'YYYY-MM-DD'),
|
||||
formatDateStr(new Date(), 'YYYY-MM-DD'),]);
|
||||
const dateRange = ref([
|
||||
formatDateStr(new Date(), 'YYYY-MM-DD'),
|
||||
formatDateStr(new Date(), 'YYYY-MM-DD'),
|
||||
]);
|
||||
const traceNoTemp = ref('');
|
||||
const traceNoTempRef = ref();
|
||||
const totalAmount = ref(0);
|
||||
@@ -226,14 +293,16 @@ function handleReturnDrug(row) {
|
||||
console.log(row);
|
||||
let saveList = [];
|
||||
if (row) {
|
||||
saveList = [
|
||||
{
|
||||
requestId: row.requestId,
|
||||
dispenseId: row.dispenseId,
|
||||
tableName: row.serviceTable,
|
||||
traceNo: row.traceNo,
|
||||
},
|
||||
];
|
||||
saveList = returDrugList.value
|
||||
.filter((item) => item.requestId == row.requestId)
|
||||
.map((item) => {
|
||||
return {
|
||||
requestId: item.requestId,
|
||||
dispenseId: item.dispenseId,
|
||||
tableName: item.serviceTable,
|
||||
traceNo: item.traceNo,
|
||||
};
|
||||
});
|
||||
} else {
|
||||
saveList = proxy.$refs.returnDrugRef.getSelectionRows().map((item) => {
|
||||
return {
|
||||
@@ -248,7 +317,7 @@ function handleReturnDrug(row) {
|
||||
returnDrug(saveList).then((res) => {
|
||||
if (res.code === 200) {
|
||||
proxy.$modal.msgSuccess('退药成功');
|
||||
getEncounterList()
|
||||
getEncounterList();
|
||||
getReturnDrugList({
|
||||
encounterId: encounterId.value,
|
||||
refundStatus: queryParams.value.refundEnum,
|
||||
@@ -259,12 +328,79 @@ function handleReturnDrug(row) {
|
||||
});
|
||||
}
|
||||
|
||||
function handleSelectionChange(selectRows) {
|
||||
selectedMedicines.value = selectRows;
|
||||
totalAmount.value = selectRows.reduce((accumulator, currentRow) => {
|
||||
// 选择框改变时的处理
|
||||
function handleSelection(selection, row) {
|
||||
const isSelected = selection.some((item) => item.dispenseId === row.dispenseId);
|
||||
returDrugList.value
|
||||
.filter((item) => {
|
||||
return item.requestId == row.requestId;
|
||||
})
|
||||
.forEach((row) => {
|
||||
proxy.$refs['returnDrugRef'].toggleRowSelection(row, isSelected);
|
||||
});
|
||||
nextTick(() => {
|
||||
selectedMedicines.value = proxy.$refs['returnDrugRef'].getSelectionRows();
|
||||
totalAmount.value = selectedMedicines.value.reduce((accumulator, currentRow) => {
|
||||
return accumulator + (currentRow.totalPrice || 0);
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
|
||||
function handelSelectRows(selection) {
|
||||
selectedMedicines.value = selection;
|
||||
totalAmount.value = selectedMedicines.value.reduce((accumulator, currentRow) => {
|
||||
return accumulator + (currentRow.totalPrice || 0);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
// 根据 requestId 合并相同行的方法(只合并药品名称和总价列)
|
||||
function handelSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
// 定义需要合并的列索引
|
||||
// 1: 药品名称列, 2: 总价列
|
||||
const mergeColumns = [1, 2, 5, 7, 8];
|
||||
|
||||
// 检查当前列是否需要合并
|
||||
if (!mergeColumns.includes(columnIndex)) {
|
||||
return [1, 1];
|
||||
}
|
||||
|
||||
// 获取当前行的 requestId
|
||||
const currentRequestId = row.requestId;
|
||||
|
||||
// 如果没有 requestId,不进行合并
|
||||
if (!currentRequestId) {
|
||||
return [1, 1];
|
||||
}
|
||||
|
||||
// 查找具有相同 requestId 的连续行
|
||||
let rowspan = 1;
|
||||
let colspan = 1;
|
||||
|
||||
// 向上查找相同 requestId 的行
|
||||
let startIndex = rowIndex;
|
||||
while (startIndex > 0 && returDrugList.value[startIndex - 1].requestId === currentRequestId) {
|
||||
startIndex--;
|
||||
rowspan++;
|
||||
}
|
||||
|
||||
// 如果当前行不是合并组的第一行,则不显示
|
||||
if (startIndex !== rowIndex) {
|
||||
return [0, 0];
|
||||
}
|
||||
|
||||
// 向下查找相同 requestId 的行
|
||||
let endIndex = rowIndex;
|
||||
while (
|
||||
endIndex < returDrugList.value.length - 1 &&
|
||||
returDrugList.value[endIndex + 1].requestId === currentRequestId
|
||||
) {
|
||||
endIndex++;
|
||||
rowspan++;
|
||||
}
|
||||
|
||||
// 只有当 rowspan > 1 时才进行合并
|
||||
return rowspan > 1 ? [rowspan, colspan] : [1, 1];
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -339,4 +475,8 @@ function handleSelectionChange(selectRows) {
|
||||
::v-deep.el-textarea .el-textarea__inner {
|
||||
resize: none !important;
|
||||
}
|
||||
|
||||
:deep(.no-hover-table) .el-table__body tr:hover > td {
|
||||
background: inherit !important;
|
||||
}
|
||||
</style>
|
||||
@@ -1,34 +1,77 @@
|
||||
import request from '@/utils/request'
|
||||
import request from '@/utils/request';
|
||||
|
||||
export function listSkinRecord(query) {
|
||||
/**
|
||||
* 获取患者列表
|
||||
*/
|
||||
export function getList(queryParams) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/outpatient-record-page',
|
||||
url: '/outpatient-manage/treatment/encounter-list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取皮试记录列表
|
||||
*/
|
||||
export function listSkinRecord(queryParams) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/record-info',
|
||||
method: 'get',
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**后台没有对应接口,暂无
|
||||
* 更新护士签名
|
||||
*/
|
||||
export function updateNurseSign(data) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/nurse-sign',
|
||||
method: 'put',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新皮试记录
|
||||
*/
|
||||
export function updateSkinTestRecord(data) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/save-record-info',
|
||||
method: 'post',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化选项
|
||||
*/
|
||||
export function lists() {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/init',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取护士列表
|
||||
*/
|
||||
export function getNurseList(queryParams) {
|
||||
return request({
|
||||
url: '/app-common/nurse-list',
|
||||
method: 'get',
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
export function updateSkinTestRecord(data) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/outpatient-record-skin-test',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
export function updateNurseSign(data) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/outpatient-record-sign-check',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 新增皮试记录
|
||||
*/
|
||||
export function addSkinTestRecord(data) {
|
||||
return request({
|
||||
url: '/outpatient-manage/skin-test/save-record-info',
|
||||
method: 'post',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
import request from '@/utils/request'
|
||||
import request from '@/utils/request';
|
||||
// 病历相关接口
|
||||
/**
|
||||
* 获取患者列表
|
||||
@@ -7,8 +7,8 @@ export function getList(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/main/patient-info',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -18,8 +18,8 @@ export function getEmrHistoryList(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/emr/emr-page',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -29,8 +29,8 @@ export function getEmrTemplateList(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/emr/emr-template-page',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,7 +40,7 @@ export function receiveEncounter(encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/main/receive-encounter?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -50,7 +50,7 @@ export function leaveEncounter(encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/main/leave-encounter?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -60,7 +60,7 @@ export function completeEncounter(encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/main/complete-encounter?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,39 +70,39 @@ export function saveEmr(data) {
|
||||
return request({
|
||||
url: '/doctor-station/emr/emr',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除病历模板
|
||||
*/
|
||||
export function deleteEmrTemplate(id){
|
||||
export function deleteEmrTemplate(id) {
|
||||
return request({
|
||||
url: '/doctor-station/emr/emr-template?id=' + id,
|
||||
method: 'delete',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取病历详情
|
||||
*/
|
||||
export function getEmrDetail(encounterId){
|
||||
export function getEmrDetail(encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/emr/emr-detail?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存病历模板
|
||||
*/
|
||||
export function saveEmrTemplate(data){
|
||||
export function saveEmrTemplate(data) {
|
||||
return request({
|
||||
url: '/doctor-station/emr/emr-template',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
// 诊断相关接口
|
||||
@@ -111,10 +111,10 @@ export function saveEmrTemplate(data){
|
||||
*/
|
||||
export function saveDiagnosis(data) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/save-doctor-diagnosis',
|
||||
url: '/doctor-station/diagnosis/save-doctor-diagnosisnew',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,8 +124,8 @@ export function saveDiagnosisBind(data) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/diagnosis-belong-binding',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 删除诊断绑定
|
||||
@@ -134,7 +134,7 @@ export function deleteDiagnosisBind(id) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/diagnosis-belong-binding?id=' + id,
|
||||
method: 'delete',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,8 +144,8 @@ export function getDiagnosisDefinitionList(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/condition-definition-metadata',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,7 +155,7 @@ export function getConditionDefinitionInfo(patientId) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/get-condition-definition-class?patientId=' + patientId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -165,40 +165,51 @@ export function diagnosisInit() {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/init',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* 获取诊断回显数据
|
||||
*/
|
||||
export function getEncounterDiagnosis(encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/get-encounter-diagnosis?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* 获取诊断集合数据
|
||||
*/
|
||||
export function getDiagnosisListEle(searchKey,encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/get-encounter-diagnosis-ele?searchKey=' + searchKey+'&encounterId='+encounterId,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 获取诊断集合数据
|
||||
*/
|
||||
export function getDiagnosisList(searchKey) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/get-diagnosis-list?searchKey=' + searchKey,
|
||||
method: 'get',
|
||||
})
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/get-diagnosis-list?searchKey=' + searchKey,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* 删除就诊诊断
|
||||
*/
|
||||
export function delEncounterDiagnosis(conditionId) {
|
||||
return request({
|
||||
url: '/doctor-station/diagnosis/encounter-diagnosis?conditionId=' + conditionId,
|
||||
method: 'delete',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 处方相关接口
|
||||
@@ -209,8 +220,8 @@ export function getAdviceBaseInfo(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/advice-base-info',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 保存处方(单条)
|
||||
@@ -219,8 +230,8 @@ export function savePrescription(data) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/save-advice',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 签发处方
|
||||
@@ -229,8 +240,8 @@ export function savePrescriptionSign(data) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/sign-advice',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 处方签退
|
||||
@@ -239,8 +250,8 @@ export function singOut(data) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/sign-off',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 获取患者本次就诊处方
|
||||
@@ -249,7 +260,7 @@ export function getPrescriptionList(encounterId) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/request-base-info?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 获取科室列表
|
||||
@@ -258,7 +269,7 @@ export function getOrgTree() {
|
||||
return request({
|
||||
url: '/base-data-manage/organization/organization',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 获取退费账单
|
||||
@@ -267,7 +278,7 @@ export function getEncounterPatientPayment(encounterId) {
|
||||
return request({
|
||||
url: '/charge-manage/refund/patient-payment?encounterId=' + encounterId,
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 申请退费
|
||||
@@ -276,11 +287,10 @@ export function refundPayment(data) {
|
||||
return request({
|
||||
url: '/charge-manage/refund/refund-payment',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 电子处方相关接口
|
||||
/**
|
||||
* 电子处方查询
|
||||
@@ -289,8 +299,8 @@ export function getVeriPrescriptionInfo(queryParams) {
|
||||
return request({
|
||||
url: '/ybelep-request/get-PrescriptionInfo',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
// 处方开立相关接口
|
||||
@@ -301,16 +311,16 @@ export function getAllMedicationInfo(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/get-allMedicationInfo',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
// 当返回的list为空时在调用get-allMedicationInfo
|
||||
export function getAllMedicationUsualInfo(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/get-allMedicationUsualInfo',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 电子处方下拉框
|
||||
@@ -318,8 +328,8 @@ export function getAllMedicationUsualInfo(queryParams) {
|
||||
export function elepPrescriptionInit() {
|
||||
return request({
|
||||
url: '/doctor-station/elep/init',
|
||||
method: 'get'
|
||||
})
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -329,8 +339,8 @@ export function getPrescriptionInfo(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/get-prescriptionInfo',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -340,8 +350,8 @@ export function getMedicationInfo(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/get-medicationInfo',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -350,8 +360,8 @@ export function getMedicationInfo(queryParams) {
|
||||
export function prescriptionNoInit() {
|
||||
return request({
|
||||
url: '/doctor-station/elep/prescriptionNoInit',
|
||||
method: 'get'
|
||||
})
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -361,8 +371,8 @@ export function savePrescriptionInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/save-prescriptionInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -372,8 +382,8 @@ export function updatePrescriptionInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/update-prescriptionInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -383,8 +393,8 @@ export function deletePrescriptionInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/delete-prescriptionInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -394,8 +404,8 @@ export function issuancePrescription(prescriptionNoList) {
|
||||
return request({
|
||||
url: '/doctor-station/elep/issuance-prescription',
|
||||
method: 'post',
|
||||
data: prescriptionNoList
|
||||
})
|
||||
data: prescriptionNoList,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -405,8 +415,8 @@ export function getAdviceHistoryInfo(params) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/request-history-info',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -416,8 +426,8 @@ export function updateGroupId(data) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/update-groupid',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -427,8 +437,8 @@ export function getOrderGroupList(params) {
|
||||
return request({
|
||||
url: '/personalization/order-group/order-group',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -438,11 +448,10 @@ export function getContract(params) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/get-encounter-contract',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 取得药品最新数据
|
||||
*/
|
||||
@@ -450,8 +459,8 @@ export function queryYbCatalogue(params) {
|
||||
return request({
|
||||
url: '/yb-request/query-yb-catalogue',
|
||||
method: 'post',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -461,8 +470,8 @@ export function getChronicDisease(params) {
|
||||
return request({
|
||||
url: '/yb-request/getConditionDefinition',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -472,8 +481,8 @@ export function getTcmMedicine(params) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/tcm-advice-base-info',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -483,8 +492,8 @@ export function getTcmCondition(params) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/condition-info',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -494,8 +503,8 @@ export function getTcmSyndrome(params) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/syndrome-info',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -505,8 +514,8 @@ export function getTcmDiagnosis(params) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/get-tcm-encounter-diagnosis',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -516,8 +525,20 @@ export function saveTcmDiagnosis(data) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/save-tcm-diagnosis',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 保存中医诊断
|
||||
*/
|
||||
export function updateTcmDiagnosis(data) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/update-tcm-diagnosis',
|
||||
method: 'post',
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -527,7 +548,7 @@ export function deleteTcmDiagnosis(syndromeGroupNo) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/tcm-diagnosis?syndromeGroupNo=' + syndromeGroupNo,
|
||||
method: 'delete',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -537,8 +558,8 @@ export function saveTcmAdvice(data) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/save-tcm-advice',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -548,8 +569,8 @@ export function signTcmAdvice(data) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/sign-tcm-advice',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -559,8 +580,8 @@ export function signOutTcmAdvice(data) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/sign-tcm-off',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -570,11 +591,10 @@ export function getTcmAdviceList(params) {
|
||||
return request({
|
||||
url: '/doctor-station/chinese-medical/tcm-request-base-info',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取预约记录
|
||||
*/
|
||||
@@ -582,8 +602,8 @@ export function getReservationInfo(params) {
|
||||
return request({
|
||||
url: '/doctor-station/reservation-record/reservation-info',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -593,8 +613,8 @@ export function addReservationInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/reservation-record/save-reservation',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -604,8 +624,8 @@ export function editReservationInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/reservation-record/edit-reservation',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -615,17 +635,16 @@ export function delReservationInfo(id) {
|
||||
return request({
|
||||
url: '/doctor-station/reservation-record/del-reservation',
|
||||
method: 'delete',
|
||||
params: id
|
||||
})
|
||||
params: id,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 查询初期所需数据
|
||||
export function getInit() {
|
||||
return request({
|
||||
url: '/charge-manage/register/init',
|
||||
method: 'get'
|
||||
})
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -635,8 +654,8 @@ export function queryParticipantList(params) {
|
||||
return request({
|
||||
url: '/app-common/practitioner-list',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -646,7 +665,7 @@ export function getOrgList() {
|
||||
return request({
|
||||
url: '/base-data-manage/organization/organization',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -656,8 +675,8 @@ export function wardList(params) {
|
||||
return request({
|
||||
url: '/app-common/ward-list',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -667,8 +686,8 @@ export function handleHospitalization(data) {
|
||||
return request({
|
||||
url: '/inhospital-charge/register/by-doctor',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -678,8 +697,8 @@ export function getEnPrescriptionInfo(data) {
|
||||
return request({
|
||||
url: '/doctor-station/main/prescription-page-info',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
params: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -689,8 +708,8 @@ export function getOrderGroup(data) {
|
||||
return request({
|
||||
url: '/personalization/orders-group-package/group-package-for-order',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
params: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -700,8 +719,8 @@ export function getBindDevice(data) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/order-bind-info',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
params: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -711,6 +730,46 @@ export function isFoodDiseasesNew(params) {
|
||||
return request({
|
||||
url: '/external-integration/foodborne-acquisition/is-food-diseases-new',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
// 是否入院登记
|
||||
export function isHospitalization(params) {
|
||||
return request({
|
||||
url: '/inhospital-charge/register/isRegister',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
// 校验三十天内是否开过相同检查检验项目
|
||||
export function checkServicesHistory(params) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/proof-test-history',
|
||||
method: 'get',
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询检验报告 url
|
||||
*/
|
||||
export function getProofResult(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/proof-result',
|
||||
method: 'get',
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询检查报告 url
|
||||
*/
|
||||
export function getTestResult(queryParams) {
|
||||
return request({
|
||||
url: '/doctor-station/advice/test-result',
|
||||
method: 'get',
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -91,7 +91,9 @@ import {
|
||||
getTcmCondition,
|
||||
getTcmSyndrome,
|
||||
saveTcmDiagnosis,
|
||||
updateTcmDiagnosis,
|
||||
} from '@/views/doctorstation/components/api';
|
||||
import { update } from 'lodash';
|
||||
|
||||
const props = defineProps({
|
||||
openAddDiagnosisDialog: {
|
||||
@@ -102,6 +104,10 @@ const props = defineProps({
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
updateZy: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const conditionList = ref([]);
|
||||
@@ -118,64 +124,183 @@ function handleOpen() {
|
||||
getTcmCondition().then((res) => {
|
||||
conditionList.value = res.data.records;
|
||||
});
|
||||
}
|
||||
|
||||
// 点击诊断列表处理,点击以后才显示证候列表
|
||||
function handleClickRow(row) {
|
||||
if (syndromeSelected.value || tcmDiagonsisList.value == 0) {
|
||||
selectedDisease.value = true;
|
||||
syndromeSelected.value = false;
|
||||
timestamp.value = Date.now();
|
||||
getTcmSyndrome().then((res) => {
|
||||
syndromeList.value = res.data.records;
|
||||
});
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
definitionId: row.id,
|
||||
ybNo: row.ybNo,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
verificationStatusEnum: 4,
|
||||
medTypeCode: '11',
|
||||
});
|
||||
tcmDiagonsisList.value.push({
|
||||
conditionName: row.name,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
tcmDiagonsisSaveList.value=[];
|
||||
tcmDiagonsisList.value=[];
|
||||
debugger;
|
||||
if (props.updateZy.length>0) {
|
||||
props.updateZy.forEach((item) => {
|
||||
let updateIds=item.updateId.split("-");
|
||||
let name=item.name.split("-");
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
conditionId: updateIds[0],
|
||||
definitionId: item.illnessDefinitionId,
|
||||
ybNo: item.ybNo,
|
||||
syndromeGroupNo: item.syndromeGroupNo,
|
||||
verificationStatusEnum: 4,
|
||||
medTypeCode: '11',
|
||||
diagSrtNo:item.diagSrtNo,
|
||||
});
|
||||
tcmDiagonsisList.value.push({
|
||||
conditionName: name[0],
|
||||
syndromeGroupNo: item.syndromeGroupNo,
|
||||
});
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
conditionId: updateIds[1],
|
||||
definitionId: item.symptomDefinitionId,
|
||||
ybNo: item.symptomYbNo,
|
||||
syndromeGroupNo: item.syndromeGroupNo,
|
||||
diagSrtNo:item.diagSrtNo,
|
||||
});
|
||||
tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].syndromeName = name[1];
|
||||
console.log("这是修改时带入的数据");
|
||||
console.log(tcmDiagonsisList.value);
|
||||
console.log(tcmDiagonsisSaveList.value);
|
||||
syndromeSelected.value = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 点击诊断列表处理,点击以后才显示证候列表
|
||||
function handleClickRow(row) {
|
||||
if (syndromeSelected.value || tcmDiagonsisList.value.length == 0) {
|
||||
syndromeSelected.value = false;
|
||||
selectedDisease.value = true;
|
||||
timestamp.value = Date.now();
|
||||
getTcmSyndrome().then((res) => {
|
||||
syndromeList.value = res.data.records;
|
||||
});
|
||||
|
||||
if (props.updateZy.length>0) {
|
||||
props.updateZy.forEach((item) => {
|
||||
let updateIds=item.updateId.split("-");
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
updateId:updateIds[0],
|
||||
conditionId: updateIds[0],
|
||||
definitionId: row.id,
|
||||
ybNo: row.ybNo,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
verificationStatusEnum: 4,
|
||||
medTypeCode: '11',
|
||||
diagSrtNo:item.diagSrtNo,
|
||||
});
|
||||
debugger;
|
||||
if(tcmDiagonsisList.value.length>0){
|
||||
tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].conditionName = row.name;
|
||||
}else{
|
||||
tcmDiagonsisList.value.push({
|
||||
conditionName: row.name,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
});
|
||||
}
|
||||
});
|
||||
}else{
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
definitionId: row.id,
|
||||
ybNo: row.ybNo,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
verificationStatusEnum: 4,
|
||||
medTypeCode: '11',
|
||||
});
|
||||
tcmDiagonsisList.value.push({
|
||||
conditionName: row.name,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// tcmDiagonsisList.value.push({
|
||||
// conditionName: row.name,
|
||||
// syndromeGroupNo: timestamp.value,
|
||||
// });
|
||||
|
||||
}
|
||||
|
||||
function clickSyndromeRow(row) {
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
definitionId: row.id,
|
||||
ybNo: row.ybNo,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
debugger;
|
||||
let flag=true;
|
||||
tcmDiagonsisList.value.forEach( item => {
|
||||
if(tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].conditionName==item.conditionName){
|
||||
if(item.syndromeName==row.name ){
|
||||
proxy.$modal.msgWarning('不能存在完全相同的诊断和证侯');
|
||||
flag=false;
|
||||
}
|
||||
}
|
||||
});
|
||||
tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].syndromeName = row.name;
|
||||
syndromeSelected.value = true;
|
||||
if(flag){
|
||||
if(props.updateZy.length>0){
|
||||
props.updateZy.forEach((item) => {
|
||||
let updateIds=item.updateId.split("-");
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
updateId:updateIds[1],
|
||||
conditionId: updateIds[1],
|
||||
definitionId: row.id,
|
||||
ybNo: row.ybNo,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
});
|
||||
tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].syndromeName = row.name;
|
||||
syndromeSelected.value = true;
|
||||
});
|
||||
|
||||
}else{
|
||||
tcmDiagonsisSaveList.value.push({
|
||||
definitionId: row.id,
|
||||
ybNo: row.ybNo,
|
||||
syndromeGroupNo: timestamp.value,
|
||||
});
|
||||
tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].syndromeName = row.name;
|
||||
syndromeSelected.value = true;
|
||||
}
|
||||
|
||||
|
||||
// tcmDiagonsisList.value[tcmDiagonsisList.value.length - 1].syndromeName = row.name;
|
||||
// syndromeSelected.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 删除诊断
|
||||
function removeDiagnosis(row, index) {
|
||||
tcmDiagonsisList.value.splice(index, 1);
|
||||
tcmDiagonsisSaveList.value = tcmDiagonsisSaveList.filter((item) => {
|
||||
tcmDiagonsisSaveList.value = tcmDiagonsisSaveList.value.filter((item) => {
|
||||
return item.syndromeGroupNo !== row.syndromeGroupNo;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function save() {
|
||||
saveTcmDiagnosis({
|
||||
patientId: props.patientInfo.patientId,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
diagnosisChildList: tcmDiagonsisSaveList.value,
|
||||
}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
emit('close');
|
||||
proxy.$modal.msgSuccess('诊断已保存');
|
||||
}
|
||||
});
|
||||
if(props.updateZy.length>0){
|
||||
updateTcmDiagnosis({
|
||||
patientId: props.patientInfo.patientId,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
diagnosisChildList: tcmDiagonsisSaveList.value,
|
||||
}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
emit('close');
|
||||
proxy.$modal.msgSuccess('诊断已保存');
|
||||
}
|
||||
});
|
||||
}else{
|
||||
saveTcmDiagnosis({
|
||||
patientId: props.patientInfo.patientId,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
diagnosisChildList: tcmDiagonsisSaveList.value,
|
||||
}).then((res) => {
|
||||
if (res.code == 200) {
|
||||
emit('close');
|
||||
proxy.$modal.msgSuccess('诊断已保存');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function submit() {
|
||||
if (tcmDiagonsisSaveList.value.length > 0 && syndromeSelected.value) {
|
||||
debugger;
|
||||
if (
|
||||
tcmDiagonsisSaveList.value.length > 0 &&
|
||||
(syndromeSelected.value || tcmDiagonsisSaveList.value.length % 2 == 0)
|
||||
) {
|
||||
save();
|
||||
} else {
|
||||
proxy.$modal.msgWarning('请选择证候');
|
||||
|
||||
@@ -2,33 +2,64 @@
|
||||
<div>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="4" :xs="24">
|
||||
<el-input v-model="diagnosis" placeholder="诊断名称" clearable style="width: 100%; margin-bottom: 10px"
|
||||
@keyup.enter="queryDiagnosisUse">
|
||||
<el-input
|
||||
v-model="diagnosis"
|
||||
placeholder="诊断名称"
|
||||
clearable
|
||||
style="width: 100%; margin-bottom: 10px"
|
||||
@keyup.enter="queryDiagnosisUse"
|
||||
>
|
||||
<template #append>
|
||||
<el-button icon="Search" @click="queryDiagnosisUse" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-tree ref="treeRef" :data="tree" node-key="id" :props="{ label: 'name', children: 'children' }"
|
||||
highlight-current default-expand-all :filter-node-method="filterNode" @node-click="handleNodeClick">
|
||||
<el-tree
|
||||
ref="treeRef"
|
||||
:data="tree"
|
||||
node-key="id"
|
||||
:props="{ label: 'name', children: 'children' }"
|
||||
highlight-current
|
||||
default-expand-all
|
||||
:filter-node-method="filterNode"
|
||||
class="tree-with-scrollbar"
|
||||
@node-click="handleNodeClick"
|
||||
max-height="650"
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<div class="custom-tree-node">
|
||||
<span>{{ node.label }}</span>
|
||||
<span class="tree-node-actions">
|
||||
<template v-if="node.level === 1 && data.name != '常用' && data.name != '历史'">
|
||||
<el-button style="color: #000000" type="text" size="small" @click.stop="addChild(data)">
|
||||
<el-button
|
||||
style="color: #000000"
|
||||
type="text"
|
||||
size="small"
|
||||
@click.stop="addChild(data)"
|
||||
>
|
||||
<el-icon>
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-button>
|
||||
</template>
|
||||
<el-popconfirm width="200" :hide-after="10" title="确认删除此常用诊断吗" placement="top-start"
|
||||
@confirm="deleteChild(data)">
|
||||
<el-popconfirm
|
||||
width="200"
|
||||
:hide-after="10"
|
||||
title="确认删除此常用诊断吗"
|
||||
placement="top-start"
|
||||
@confirm="deleteChild(data)"
|
||||
>
|
||||
<template #reference>
|
||||
<el-button style="color: #000000" v-if="
|
||||
node.level === 2 &&
|
||||
node.parent.data.name != '常用' &&
|
||||
node.parent.data.name != '历史'
|
||||
" type="text" size="small" @click.stop="">
|
||||
<el-button
|
||||
style="color: #000000"
|
||||
v-if="
|
||||
node.level === 2 &&
|
||||
node.parent.data.name != '常用' &&
|
||||
node.parent.data.name != '历史'
|
||||
"
|
||||
type="text"
|
||||
size="small"
|
||||
@click.stop=""
|
||||
>
|
||||
<el-icon>
|
||||
<Minus />
|
||||
</el-icon>
|
||||
@@ -46,6 +77,9 @@
|
||||
<el-button type="primary" plain @click="handleSaveDiagnosis()"> 保存诊断 </el-button>
|
||||
<el-button type="primary" plain @click="handleAddTcmDiagonsis()"> 中医诊断 </el-button>
|
||||
<el-button type="primary" plain @click="handleImport()"> 导入慢性病诊断 </el-button>
|
||||
<span style="font-size: 12px; margin-left: 10px"
|
||||
>注意 : 若使用电子处方,请不要导入慢性病诊断</span
|
||||
>
|
||||
</div>
|
||||
|
||||
<el-form :model="form" :rules="rules" ref="formRef">
|
||||
@@ -53,17 +87,32 @@
|
||||
<el-table-column label="序号" type="index" width="50" />
|
||||
<el-table-column label="诊断排序" align="center" prop="diagSrtNo" width="180">
|
||||
<template #default="scope">
|
||||
<el-form-item :prop="`diagnosisList.${scope.$index}.diagSrtNo`" :rules="rules.diagSrtNo">
|
||||
<el-input-number v-model="scope.row.diagSrtNo" controls-position="right" :controls="false"
|
||||
style="width: 80px" />
|
||||
<el-form-item
|
||||
:prop="`diagnosisList.${scope.$index}.diagSrtNo`"
|
||||
:rules="rules.diagSrtNo"
|
||||
>
|
||||
<el-input-number
|
||||
v-model="scope.row.diagSrtNo"
|
||||
controls-position="right"
|
||||
:controls="false"
|
||||
style="width: 80px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="诊断类别" align="center" prop="diagSrtNo" width="180">
|
||||
<template #default="scope">
|
||||
<el-form-item :prop="`diagnosisList.${scope.$index}.medTypeCode`" :rules="rules.medTypeCode">
|
||||
<el-form-item
|
||||
:prop="`diagnosisList.${scope.$index}.medTypeCode`"
|
||||
:rules="rules.medTypeCode"
|
||||
>
|
||||
<el-select v-model="scope.row.medTypeCode" placeholder=" " style="width: 150px">
|
||||
<el-option v-for="item in med_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||
<el-option
|
||||
v-for="item in med_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
@@ -71,12 +120,26 @@
|
||||
<el-table-column label="诊断名称" align="center" prop="name">
|
||||
<template #default="scope">
|
||||
<el-form-item :prop="`diagnosisList.${scope.$index}.name`" :rules="rules.name">
|
||||
<el-popover :popper-style="{ padding: '0' }" placement="bottom-start" :visible="scope.row.showPopover"
|
||||
trigger="manual" :width="800">
|
||||
<diagnosislist :diagnosisSearchkey="diagnosisSearchkey" @selectDiagnosis="handleSelsectDiagnosis" />
|
||||
<el-popover
|
||||
:popper-style="{ padding: '0' }"
|
||||
placement="bottom-start"
|
||||
:visible="scope.row.showPopover"
|
||||
trigger="manual"
|
||||
:width="800"
|
||||
>
|
||||
|
||||
<diagnosislist
|
||||
:diagnosisSearchkey="diagnosisSearchkey"
|
||||
@selectDiagnosis="handleSelsectDiagnosis"
|
||||
/>
|
||||
<template #reference>
|
||||
<el-input v-model="scope.row.name" placeholder="请选择诊断" @input="handleChange"
|
||||
@focus="handleFocus(scope.row, scope.$index)" @blur="handleBlur(scope.row)" />
|
||||
<el-input
|
||||
v-model="scope.row.name"
|
||||
placeholder="请选择诊断"
|
||||
@input="handleChange"
|
||||
@focus="handleFocus(scope.row, scope.$index)"
|
||||
@blur="handleBlur(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-popover>
|
||||
</el-form-item>
|
||||
@@ -86,18 +149,37 @@
|
||||
<el-table-column label="类别" align="center" prop="typeName" width="100" />
|
||||
<el-table-column label="诊断类型" align="center" prop="maindiseFlag">
|
||||
<template #default="scope">
|
||||
<el-checkbox label="主诊断" :trueLabel="1" :falseLabel="0" v-model="scope.row.maindiseFlag" border
|
||||
size="small" @change="(value) => handleMaindise(value, scope.$index)" />
|
||||
<el-select v-model="scope.row.verificationStatusEnum" placeholder=" "
|
||||
style="width: 40%; padding-bottom: 5px; padding-left: 10px" size="small">
|
||||
<el-option v-for="item in diagnosisOptions" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
<el-checkbox
|
||||
label="主诊断"
|
||||
:trueLabel="1"
|
||||
:falseLabel="0"
|
||||
v-model="scope.row.maindiseFlag"
|
||||
border
|
||||
size="small"
|
||||
@change="(value) => handleMaindise(value, scope.$index)"
|
||||
/>
|
||||
<el-select
|
||||
v-model="scope.row.verificationStatusEnum"
|
||||
placeholder=" "
|
||||
style="width: 40%; padding-bottom: 5px; padding-left: 10px"
|
||||
size="small"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in diagnosisOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="130">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="handleDeleteDiagnosis(scope.row, scope.$index)">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleDeleteDiagnosis(scope.row, scope.$index)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -106,9 +188,17 @@
|
||||
</el-form>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<diagnosisdialog :openDiagnosis="openDiagnosis" @close="closeDiagnosisDialog" :radio="orgOrUser" />
|
||||
<AddDiagnosisDialog :openAddDiagnosisDialog="openAddDiagnosisDialog" :patientInfo="props.patientInfo"
|
||||
@close="closeDiagnosisDialog" />
|
||||
<diagnosisdialog
|
||||
:openDiagnosis="openDiagnosis"
|
||||
@close="closeDiagnosisDialog"
|
||||
:radio="orgOrUser"
|
||||
/>
|
||||
<AddDiagnosisDialog
|
||||
:openAddDiagnosisDialog="openAddDiagnosisDialog"
|
||||
:updateZy="updateZy"
|
||||
:patientInfo="props.patientInfo"
|
||||
@close="closeDiagnosisDialog"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -130,10 +220,12 @@ import {
|
||||
import diagnosisdialog from '../diagnosis/diagnosisdialog.vue';
|
||||
import AddDiagnosisDialog from './addDiagnosisDialog.vue';
|
||||
import diagnosislist from '../diagnosis/diagnosislist.vue';
|
||||
import { onMounted, onBeforeUnmount } from 'vue';
|
||||
// const diagnosisList = ref([]);
|
||||
const allowAdd = ref(false);
|
||||
const tree = ref([]);
|
||||
const openDiagnosis = ref(false);
|
||||
const updateZy = ref([]);
|
||||
const openAddDiagnosisDialog = ref(false);
|
||||
const diagnosisSearchkey = ref('');
|
||||
const diagnosisOptions = ref([]);
|
||||
@@ -142,6 +234,7 @@ const diagnosis = ref();
|
||||
const orgOrUser = ref();
|
||||
const form = ref({
|
||||
diagnosisList: [],
|
||||
isDataLoaded: false,
|
||||
});
|
||||
const props = defineProps({
|
||||
patientInfo: {
|
||||
@@ -172,29 +265,46 @@ function getDetail(encounterId) {
|
||||
});
|
||||
}
|
||||
|
||||
function refreshData() {
|
||||
getList();
|
||||
}
|
||||
let maxNo = 99;
|
||||
function getList() {
|
||||
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
|
||||
if (res.code == 200) {
|
||||
form.value.diagnosisList = res.data;
|
||||
emits('diagnosisSave', false);
|
||||
}
|
||||
});
|
||||
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
|
||||
if (res.code == 200) {
|
||||
if (res.data.illness.length > 0) {
|
||||
res.data.illness.forEach((item, index) => {
|
||||
form.value.diagnosisList.push({
|
||||
name: item.name + '-' + res.data.symptom[index].name,
|
||||
ybNo: item.ybNo,
|
||||
medTypeCode: item.medTypeCode,
|
||||
syndromeGroupNo: item.syndromeGroupNo,
|
||||
typeName: '中医诊断',
|
||||
});
|
||||
});
|
||||
getEncounterDiagnosis(props.patientInfo.encounterId)
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
form.value.diagnosisList = res.data;
|
||||
emits('diagnosisSave', false);
|
||||
}
|
||||
emits('diagnosisSave', false);
|
||||
}
|
||||
});
|
||||
maxNo = form.value.diagnosisList.length;
|
||||
})
|
||||
.then(() => {
|
||||
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
|
||||
if (res.code == 200) {
|
||||
if (res.data.illness.length > 0) {
|
||||
res.data.illness.forEach((item, index) => {
|
||||
if (item.diagSrtNo <= maxNo) {
|
||||
return;
|
||||
}
|
||||
form.value.diagnosisList.push({
|
||||
name: item.name + '-' + res.data.symptom[index].name,
|
||||
diagSrtNo: item.diagSrtNo,
|
||||
ybNo: item.ybNo,
|
||||
medTypeCode: item.medTypeCode,
|
||||
syndromeGroupNo: item.syndromeGroupNo,
|
||||
typeName: '中医诊断',
|
||||
updateId:item.encounterDiagnosisId+'-'+res.data.symptom[index].encounterDiagnosisId,
|
||||
illnessDefinitionId : item.definitionId,
|
||||
symptomDefinitionId : res.data.symptom[index].definitionId,
|
||||
symptomYbNo: res.data.symptom[index].ybNo,
|
||||
});
|
||||
maxNo = item.diagSrtNo;
|
||||
});
|
||||
}
|
||||
emits('diagnosisSave', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
getTree();
|
||||
}
|
||||
|
||||
@@ -302,10 +412,10 @@ function getTree() {
|
||||
function handleAddDiagnosis() {
|
||||
proxy.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
if (!allowAdd.value) {
|
||||
proxy.$modal.msgWarning('请先填写病历');
|
||||
return;
|
||||
}
|
||||
// if (!allowAdd.value) {
|
||||
// proxy.$modal.msgWarning('请先填写病历');
|
||||
// return;
|
||||
// }
|
||||
form.value.diagnosisList.push({
|
||||
showPopover: false,
|
||||
name: undefined,
|
||||
@@ -324,6 +434,7 @@ function handleAddDiagnosis() {
|
||||
|
||||
// 添加中医诊断
|
||||
function handleAddTcmDiagonsis() {
|
||||
updateZy.value = [];
|
||||
openAddDiagnosisDialog.value = true;
|
||||
}
|
||||
|
||||
@@ -410,13 +521,13 @@ function closeDiagnosisDialog(str) {
|
||||
if (str === 'success') {
|
||||
proxy.$modal.msgSuccess('操作成功');
|
||||
}
|
||||
|
||||
openAddDiagnosisDialog.value = false;
|
||||
openDiagnosis.value = false;
|
||||
getList();
|
||||
getTree();
|
||||
}
|
||||
|
||||
function queryDiagnosisUse(value) { }
|
||||
function queryDiagnosisUse(value) {}
|
||||
|
||||
function handleChange(value) {
|
||||
diagnosisSearchkey.value = value;
|
||||
@@ -432,8 +543,24 @@ function handleSelsectDiagnosis(row) {
|
||||
}
|
||||
/**获取焦点时 打开列表 */
|
||||
function handleFocus(row, index) {
|
||||
rowIndex.value = index;
|
||||
row.showPopover = true;
|
||||
if(row.typeName==='中医诊断'){
|
||||
updateZy.value = [];
|
||||
updateZy.value.push({
|
||||
illnessDefinitionId: row.illnessDefinitionId,
|
||||
symptomDefinitionId: row.symptomDefinitionId,
|
||||
syndromeGroupNo: row.syndromeGroupNo,
|
||||
symptomYbNo:row.symptomYbNo,
|
||||
ybNo:row.ybNo,
|
||||
updateId: row.updateId,
|
||||
diagSrtNo: row.diagSrtNo,
|
||||
name:row.name,
|
||||
});
|
||||
openAddDiagnosisDialog.value = true;
|
||||
}else{
|
||||
rowIndex.value = index;
|
||||
row.showPopover = true;
|
||||
}
|
||||
|
||||
}
|
||||
/**失去焦点时 关闭列表 */
|
||||
function handleBlur(row) {
|
||||
@@ -447,10 +574,10 @@ function handleNodeClick(data) {
|
||||
// 如果是根节点,不执行任何操作
|
||||
return;
|
||||
}
|
||||
if (!allowAdd.value) {
|
||||
proxy.$modal.msgWarning('请先填写病历');
|
||||
return;
|
||||
}
|
||||
// if (!allowAdd.value) {
|
||||
// proxy.$modal.msgWarning('请先填写病历');
|
||||
// return;
|
||||
// }
|
||||
const isDuplicate = form.value.diagnosisList.some(
|
||||
(diagnosis) => diagnosis.ybNo === data.ybNo || diagnosis.name === data.name
|
||||
);
|
||||
@@ -478,7 +605,10 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
|
||||
.el-checkbox.is-bordered.el-checkbox--small {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.tree-with-scrollbar {
|
||||
max-height: 650px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.custom-tree-node {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -1,28 +1,27 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-scrollbar height="200px">
|
||||
<el-table
|
||||
ref="emrTemplateRef"
|
||||
:data="emrTemplate"
|
||||
row-key="id"
|
||||
highlight-current-row
|
||||
@cell-click="clickRow"
|
||||
>
|
||||
<el-table-column label="模板名称" align="center" prop="templateName" />
|
||||
<!-- <el-table-column label="使用范围" align="center" prop="useScopeCode" /> -->
|
||||
<el-table-column label="操作" align="center" width="100">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click.stop="handelDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-scrollbar>
|
||||
|
||||
<el-table
|
||||
ref="emrTemplateRef"
|
||||
:data="emrTemplate"
|
||||
row-key="id"
|
||||
highlight-current-row
|
||||
max-height="400"
|
||||
@cell-click="clickRow"
|
||||
>
|
||||
<el-table-column label="模板名称" align="center" prop="templateName" />
|
||||
<!-- <el-table-column label="使用范围" align="center" prop="useScopeCode" /> -->
|
||||
<el-table-column label="操作" align="center" width="100">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click.stop="handelDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
layout="prev, pager, next"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
@@ -31,9 +30,13 @@
|
||||
<script setup>
|
||||
import { getEmrTemplateList, deleteEmrTemplate } from '../api';
|
||||
|
||||
const queryParams = ref({});
|
||||
const queryParams = ref({
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
});
|
||||
const emrTemplate = ref([]);
|
||||
const emrTemplateRef = ref();
|
||||
const total = ref(0);
|
||||
const emits = defineEmits(['selectRow']);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const selectRow = ref({});
|
||||
@@ -47,6 +50,7 @@ getList();
|
||||
function getList() {
|
||||
queryParams.value.useScopeCode = 1;
|
||||
getEmrTemplateList(queryParams.value).then((res) => {
|
||||
total.value = res.data.total;
|
||||
emrTemplate.value = res.data.records;
|
||||
console.log(emrTemplate.value, 'emrTemplate.value');
|
||||
});
|
||||
|
||||
@@ -101,9 +101,9 @@
|
||||
>
|
||||
<el-option
|
||||
v-for="item in diagnosisListOption"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:key="item.definitionId"
|
||||
:label="item.name + '--' + item.ybNo"
|
||||
:value="item.definitionId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -432,7 +432,7 @@ import { computed, onMounted, ref } from 'vue';
|
||||
import { reactive } from 'vue';
|
||||
// import { useModal, useDict } from '@/hooks';
|
||||
import { parseTime, formatNumber } from '@/utils/his';
|
||||
import { queryYbCatalogue, getDiagnosisList } from './api';
|
||||
import { queryYbCatalogue, getDiagnosisListEle } from './api';
|
||||
import { debounce } from 'lodash-es';
|
||||
|
||||
import {
|
||||
@@ -565,7 +565,7 @@ const unitMap = ref({
|
||||
|
||||
function getInit(searchKey) {
|
||||
if(searchKey) {
|
||||
getDiagnosisList(searchKey).then(res => {
|
||||
getDiagnosisListEle(searchKey,infoForm.encounterId).then(res => {
|
||||
diagnosisListOption.value = res.data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -150,12 +150,12 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入院诊断" prop="diagnosisDefinitionId">
|
||||
<el-select
|
||||
<!-- <el-select
|
||||
v-model="submitForm.diagnosisDefinitionId"
|
||||
placeholder="诊断"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
remote
|
||||
:remote-method="getDiagnosisInfo"
|
||||
style="width: 400px"
|
||||
>
|
||||
@@ -166,7 +166,10 @@
|
||||
:value="item.id"
|
||||
@click="handleDiagnosisChange(item)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-select> -->
|
||||
<el-input v-model="props.mainDiagnosis.name" disabled style="width: 400px" />
|
||||
<!-- 隐藏存储ID的字段 -->
|
||||
<input type="hidden" v-model="submitForm.diagnosisDefinitionId" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -179,7 +182,7 @@
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
getInit,
|
||||
@@ -201,6 +204,7 @@ const props = defineProps({
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
},
|
||||
mainDiagnosis: { type: Object, default: null },
|
||||
});
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
@@ -239,9 +243,17 @@ const rules = reactive({
|
||||
});
|
||||
|
||||
function openDialog() {
|
||||
console.log('orgId==========>', props.patientInfo.orgId);
|
||||
getOrgList().then((res) => {
|
||||
organization.value = res.data.records;
|
||||
// organization.value = res.data.records;
|
||||
organization.value = res.data.records[0].children.filter(
|
||||
(record) => record.typeEnum === 2 && record.classEnum === 2
|
||||
);
|
||||
console.log('organization==========>', organization.value);
|
||||
submitForm.inHospitalOrgId =
|
||||
organization.value.find((item) => item.id === props.patientInfo.orgId)?.id || '';
|
||||
});
|
||||
|
||||
// wardList().then((res) => {
|
||||
// wardListOptions.value = res.data;
|
||||
// });
|
||||
@@ -251,6 +263,14 @@ function openDialog() {
|
||||
});
|
||||
console.log(props.patientInfo, 'patientInfo');
|
||||
getDiagnosisInfo(undefined);
|
||||
console.log(props.mainDiagnosis, 'mainDiagnosis');
|
||||
if (props.mainDiagnosis) {
|
||||
submitForm.diagnosisDefinitionId = props.mainDiagnosis.definitionId;
|
||||
diagnosisDefinitionId = props.mainDiagnosis.definitionId;
|
||||
diagnosisYbNo = props.mainDiagnosis.ybNo || '';
|
||||
submitForm.medTypeCode = props.mainDiagnosis.medTypeCode;
|
||||
diagnosisDefinitionList.value = [props.mainDiagnosis];
|
||||
}
|
||||
}
|
||||
|
||||
function getDiagnosisInfo(value) {
|
||||
@@ -320,4 +340,4 @@ function close() {
|
||||
.patInfo-value {
|
||||
width: 100px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -1,34 +1,76 @@
|
||||
/*
|
||||
* @Author: sjjh
|
||||
* @Date: 2025-09-20 17:02:37
|
||||
* @Description:
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
import request from '@/utils/request';
|
||||
|
||||
// ====== 文书记录
|
||||
// 保存或更新记录
|
||||
export function saveOrUpdateRecord(data) {
|
||||
return request({
|
||||
url: '/document/record/saveOrUpdateRecord',
|
||||
method: 'post',
|
||||
data,
|
||||
});
|
||||
}
|
||||
// 新增记录
|
||||
export function addRecord(data) {
|
||||
return request({
|
||||
url: '/document/record/addRecord',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
data,
|
||||
});
|
||||
}
|
||||
// 修改记录
|
||||
export function updateRecord(data) {
|
||||
return request({
|
||||
url: '/document/record/updateRecord',
|
||||
method: 'post',
|
||||
data,
|
||||
});
|
||||
}
|
||||
// 删除历史记录
|
||||
export function deleteRecord(ids) {
|
||||
return request({
|
||||
url: '/document/record/deleteRecord',
|
||||
method: 'delete',
|
||||
data: ids,
|
||||
});
|
||||
}
|
||||
|
||||
// 记录打印次数
|
||||
export function recordPrint(recordId) {
|
||||
return request({
|
||||
url: '/document/record/record-print',
|
||||
method: 'get',
|
||||
params: { recordId },
|
||||
});
|
||||
}
|
||||
//删除模板
|
||||
export function deleteTemplate(id) {
|
||||
return request({
|
||||
url: `/document/template/delete`,
|
||||
method: 'delete',
|
||||
params: { id },
|
||||
});
|
||||
}
|
||||
|
||||
// 根据患者ID或就诊ID获取文书记录列表,只针对不需返回患者具体信息的列表,体温单除外,单独处理
|
||||
|
||||
export function getRecordByEncounterIdList(params) {
|
||||
return request({
|
||||
url: '/document/record/getRecordByEncounterIdList',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
params,
|
||||
});
|
||||
}
|
||||
// 初始化文书定义
|
||||
export function init() {
|
||||
return request({
|
||||
url: '/document/record/init',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// ====== 文书模板
|
||||
@@ -37,24 +79,22 @@ export function addTemplate(data) {
|
||||
return request({
|
||||
url: '/document/template/add',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
data,
|
||||
});
|
||||
}
|
||||
//
|
||||
export function getListByDefinitionId(definitionId) {
|
||||
return request({
|
||||
url: '/document/template/getListByDefinitionId',
|
||||
method: 'get',
|
||||
params: {definitionId}
|
||||
})
|
||||
params: { definitionId },
|
||||
});
|
||||
}
|
||||
// 更新模板
|
||||
export function updateTemplate(data) {
|
||||
return request({
|
||||
url: '/document/template/update',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,11 +7,29 @@
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<el-scrollbar class="emr-history-scrollbar-container" style="width: 100%">
|
||||
<div v-for="item in historyData" :key="item.id" class="scrollbar-item">
|
||||
<el-scrollbar
|
||||
class="emr-history-scrollbar-container"
|
||||
style="width: 100%; height: calc(100vh - 300px)"
|
||||
>
|
||||
<div
|
||||
v-for="item in historyData"
|
||||
:key="item.id"
|
||||
class="scrollbar-item"
|
||||
:class="{ 'selected-history-item': item.id === props.selectedRecordId }"
|
||||
>
|
||||
<el-tooltip effect="dark" :content="`${item.name}(${item.recordTime})`" placement="bottom">
|
||||
<el-text class="w-150px mb-2" truncated @click="handleNodeClick(item)">
|
||||
{{ item.name }}({{ item.recordTime }})
|
||||
|
||||
<el-icon
|
||||
class="ml-2"
|
||||
style="margin-left: 26px; cursor: pointer"
|
||||
:disabled="item.printCount && item.printCount > 0"
|
||||
:class="{ 'disabled-icon': item.printCount && item.printCount > 0 }"
|
||||
@click.stop="handleDelete(item)"
|
||||
>
|
||||
<Delete />
|
||||
</el-icon>
|
||||
</el-text>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
@@ -20,8 +38,8 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, defineEmits, unref } from 'vue';
|
||||
import { getRecordByEncounterIdList } from '../api';
|
||||
import { ref, reactive, defineEmits, unref, nextTick } from 'vue';
|
||||
import { getRecordByEncounterIdList, deleteRecord } from '../api';
|
||||
import { ElTree } from 'element-plus';
|
||||
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
|
||||
import { patientInfo } from '../../store/patient.js';
|
||||
@@ -31,6 +49,10 @@ const props = defineProps({
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
selectedRecordId: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
});
|
||||
const definitionId = defineModel('definitionId', {
|
||||
type: String,
|
||||
@@ -59,14 +81,30 @@ const queryList = async () => {
|
||||
historyData.value = [];
|
||||
}
|
||||
} catch (error) {
|
||||
// ElMessage.error('获取模板树失败');
|
||||
// ElMessage.error(' 获取模板树失败 ');
|
||||
historyData.value = [];
|
||||
}
|
||||
};
|
||||
const handleNodeClick = (data) => {
|
||||
emits('historyClick', data);
|
||||
};
|
||||
const currentSelectTemplate = ref({});
|
||||
// 删除历史记录
|
||||
const handleDelete = async (item) => {
|
||||
try {
|
||||
// 检查是否已打印
|
||||
if (item.printCount && item.printCount > 0) {
|
||||
ElMessage.warning('已打印的记录不允许删除');
|
||||
return;
|
||||
}
|
||||
|
||||
await deleteRecord([item.id]);
|
||||
ElMessage.success('删除成功');
|
||||
queryList();
|
||||
} catch (error) {
|
||||
ElMessage.error('删除失败');
|
||||
}
|
||||
};
|
||||
|
||||
defineExpose({ queryList });
|
||||
</script>
|
||||
|
||||
@@ -90,6 +128,16 @@ defineExpose({ queryList });
|
||||
& + .scrollbar-item {
|
||||
margin-top: 8px;
|
||||
}
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.selected-history-item {
|
||||
background-color: rgb(194, 231, 255);
|
||||
}
|
||||
|
||||
.disabled-icon {
|
||||
color: #d9d9d9;
|
||||
cursor: not-allowed;
|
||||
opacity: 0.6;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,17 +9,15 @@
|
||||
</div> -->
|
||||
<el-scrollbar class="emr-template-scrollbar-container" style="width: 100%">
|
||||
<div v-for="item in templateData" :key="item.id" class="scrollbar-item">
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
:content="`${item.name}`"
|
||||
placement="bottom"
|
||||
>
|
||||
<el-tooltip effect="dark" :content="`${item.name}`" placement="bottom">
|
||||
<el-text class="2" truncated @click="handleNodeClick(item)">
|
||||
<div class="template-item">{{ item.name }}
|
||||
<el-space>
|
||||
<el-icon><Edit @click="handleEdit(item)" /></el-icon>
|
||||
</el-space></div>
|
||||
|
||||
<div class="template-item">
|
||||
{{ item.name }}
|
||||
<el-space>
|
||||
<el-icon><Edit @click="handleEdit(item)" /></el-icon>
|
||||
<el-icon><Delete @click="handleDelete(item)" /></el-icon>
|
||||
</el-space>
|
||||
</div>
|
||||
</el-text>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
@@ -29,11 +27,11 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, defineEmits, unref } from 'vue';
|
||||
import { getListByDefinitionId } from '../api';
|
||||
import { getListByDefinitionId, deleteTemplate } from '../api';
|
||||
import { ElTree } from 'element-plus';
|
||||
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
|
||||
import { patientInfo } from '../../store/patient.js';
|
||||
const emits = defineEmits(['templateClick','edit']);
|
||||
const emits = defineEmits(['templateClick', 'edit']);
|
||||
const props = defineProps({
|
||||
definitionId: {
|
||||
type: String,
|
||||
@@ -53,15 +51,24 @@ const queryParams = ref({
|
||||
isPage: 0,
|
||||
});
|
||||
const templateData = ref([]);
|
||||
// 删除模板
|
||||
const handleDelete = async (item) => {
|
||||
try {
|
||||
await deleteTemplate(item.id);
|
||||
ElMessage.success('删除成功');
|
||||
queryList();
|
||||
} catch (error) {
|
||||
ElMessage.error('删除失败');
|
||||
}
|
||||
};
|
||||
const queryList = async () => {
|
||||
try {
|
||||
if ( unref(definitionId)&&unref(definitionId) !== '') {
|
||||
if (unref(definitionId) && unref(definitionId) !== '') {
|
||||
const res = await getListByDefinitionId(unref(definitionId));
|
||||
templateData.value = res.data || [];
|
||||
}else{
|
||||
} else {
|
||||
templateData.value = [];
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
ElMessage.error('获取模板失败');
|
||||
templateData.value = [];
|
||||
@@ -79,34 +86,33 @@ defineExpose({ queryList });
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.emr-template-container {
|
||||
height: 100%;
|
||||
// padding: 8px;
|
||||
|
||||
.emr-template-scrollbar-container{
|
||||
height: 100%;
|
||||
// padding: 8px;
|
||||
|
||||
.emr-template-scrollbar-container {
|
||||
padding: 8px;
|
||||
height: 100%;
|
||||
.scrollbar-item {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
background: var(--el-color-primary-light-9);
|
||||
& + .scrollbar-item {
|
||||
margin-top: 8px;
|
||||
}
|
||||
.el-text{
|
||||
width: calc(100% - 0px);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 8px;
|
||||
}
|
||||
.template-item{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.scrollbar-item {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
background: var(--el-color-primary-light-9);
|
||||
& + .scrollbar-item {
|
||||
margin-top: 8px;
|
||||
}
|
||||
.el-text {
|
||||
width: calc(100% - 0px);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 8px;
|
||||
}
|
||||
.template-item {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
<!--
|
||||
* @Author: sjjh
|
||||
* @Date: 2025-09-18 15:41:10
|
||||
* @Description: 门诊病历组件
|
||||
-->
|
||||
<template>
|
||||
<div class="emr-use-container">
|
||||
<div
|
||||
@@ -48,18 +43,21 @@
|
||||
<!-- <el-button type="primary" @click="newEmr">新建</el-button> -->
|
||||
<el-button type="primary" @click="saveAsModel">存为模版</el-button>
|
||||
<el-button @click="refresh">刷新</el-button>
|
||||
<el-button @click="resetForm">重置</el-button>
|
||||
<el-button type="primary" @click="save">保存</el-button>
|
||||
<!-- <el-button type="primary" @click="print">打印</el-button> -->
|
||||
<el-button type="primary" @click="print">打印</el-button>
|
||||
</el-space>
|
||||
</div>
|
||||
<div class="operate-main">
|
||||
<el-scrollbar class="template-tree-scrollbar">
|
||||
<component
|
||||
:is="currentComponent"
|
||||
ref="emrComponentRef"
|
||||
:patientInfo="props.patientInfo"
|
||||
@submitOk="handleSubmitOk"
|
||||
/>
|
||||
<div v-loading="loading" class="loading-container">
|
||||
<component
|
||||
:is="currentComponent"
|
||||
ref="emrComponentRef"
|
||||
:patientInfo="props.patientInfo"
|
||||
@submitOk="handleSubmitOk"
|
||||
/>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</div>
|
||||
@@ -72,6 +70,7 @@
|
||||
@historyClick="handleHistoryClick"
|
||||
ref="historyRef"
|
||||
v-model:definitionId="currentSelectTemplate.id"
|
||||
:selectedRecordId="selectedHistoryRecordId"
|
||||
/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="模版" name="model">
|
||||
@@ -95,18 +94,19 @@
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { getCurrentInstance, nextTick, onBeforeMount, onMounted, reactive, ref } from 'vue';
|
||||
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
|
||||
import { nextTick, onMounted, ref, watch } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { getTreeList } from '@/views/basicmanage/caseTemplates/api';
|
||||
import { addRecord, addTemplate } from './api';
|
||||
import { saveOrUpdateRecord, addTemplate, getRecordByEncounterIdList, recordPrint } from './api';
|
||||
import { patientInfo } from '../store/patient.js';
|
||||
import dayjs from 'dayjs';
|
||||
// 打印工具
|
||||
// import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
|
||||
import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
|
||||
import { getEncounterDiagnosis } from '../api';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const emits = defineEmits(['emrSaved']);
|
||||
const emits = defineEmits([]);
|
||||
const props = defineProps({
|
||||
/** 患者信息 doctorStation 传递信息*/
|
||||
/** 患者信息 doctorStation 传递信息*/
|
||||
patientInfo: {
|
||||
type: Object,
|
||||
required: true,
|
||||
@@ -129,6 +129,7 @@ const queryParams = ref({
|
||||
useRanges: [1, 2], // 0 暂不使用 1 全院 2 科室 3 个人
|
||||
organizationId: userStore.orgId,
|
||||
});
|
||||
const loading = ref(false); // 数据加载状态
|
||||
|
||||
const currentSelectTemplate = ref({
|
||||
id: '',
|
||||
@@ -138,6 +139,7 @@ const emrComponentRef = ref(null);
|
||||
const quicklyactiveName = ref('history');
|
||||
const leftShow = ref(true);
|
||||
const rightShow = ref(true);
|
||||
const templateTree = ref(null);
|
||||
|
||||
// 树配置(模板树)
|
||||
const defaultProps = {
|
||||
@@ -150,6 +152,9 @@ const queryTemplateTree = async () => {
|
||||
try {
|
||||
const res = await getTreeList(queryParams.value);
|
||||
templateData.value = res.data || [];
|
||||
|
||||
// 组件挂载后,患者信息变化时会自动调用selectDefaultTemplate
|
||||
// 这里不再重复调用,避免重复操作
|
||||
} catch (error) {
|
||||
// ElMessage.error('获取模板树失败');
|
||||
templateData.value = [];
|
||||
@@ -169,7 +174,20 @@ const handleNodeClick = (data, node) => {
|
||||
};
|
||||
// currentComponent.value = null;
|
||||
}
|
||||
historyRef.value?.queryList();
|
||||
|
||||
// 确保组件状态更新后再查询历史记录
|
||||
nextTick(() => {
|
||||
setTimeout(() => {
|
||||
historyRef.value?.queryList();
|
||||
templateRef.value?.queryList();
|
||||
|
||||
// 选择任何病历模板后,都加载该病历类型的最新历史记录
|
||||
if (node.isLeaf && props.patientInfo && props.patientInfo.patientId) {
|
||||
loadLatestMedicalRecord();
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
|
||||
templateRef.value?.queryList();
|
||||
};
|
||||
|
||||
@@ -229,19 +247,24 @@ const handleSubmitOk = async (data) => {
|
||||
editForm.value.encounterId = patientInfo.value.encounterId;
|
||||
editForm.value.patientId = patientInfo.value.patientId;
|
||||
editForm.value.recordTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
|
||||
await addRecord(editForm.value);
|
||||
ElMessage.success('病历保存成功');
|
||||
// 提交病历
|
||||
await saveOrUpdateRecord(editForm.value);
|
||||
ElMessage.success('保存成功');
|
||||
|
||||
// 刷新历史记录列表
|
||||
historyRef.value?.queryList();
|
||||
templateRef.value?.queryList();
|
||||
// 通知父组件病历保存成功
|
||||
emits('emrSaved', true);
|
||||
|
||||
// 等待历史记录列表更新后,重新加载最新病历并更新选中状态
|
||||
setTimeout(() => {
|
||||
loadLatestMedicalRecord();
|
||||
}, 100);
|
||||
} catch (error) {
|
||||
ElMessage.error('提交失败');
|
||||
console.log(error);
|
||||
}
|
||||
} else if (currentOperate.value === 'addTemplate') {
|
||||
// 新增或者编辑模板
|
||||
// editTemplateForm.value.id=
|
||||
// 新增或修改模板
|
||||
editTemplateForm.value.name =
|
||||
currentSelectTemplate.value.name + dayjs().format('YYYY/MM/DD HH:mm');
|
||||
editTemplateForm.value.contextJson = JSON.stringify(data);
|
||||
@@ -256,17 +279,12 @@ const refresh = () => {
|
||||
templateRef.value?.queryList();
|
||||
};
|
||||
|
||||
const deleteEmr = async () => {
|
||||
try {
|
||||
// 这里应该添加实际的删除逻辑
|
||||
ElMessage.success('删除成功!');
|
||||
} catch (error) {
|
||||
ElMessage.error('删除失败');
|
||||
}
|
||||
};
|
||||
|
||||
const save = async () => {
|
||||
try {
|
||||
if (editForm.value && editForm.value.printCount && editForm.value.printCount > 0) {
|
||||
ElMessage.warning('该病历已打印,不允许修改');
|
||||
return;
|
||||
}
|
||||
currentOperate.value = 'add';
|
||||
await emrComponentRef.value?.submit();
|
||||
} catch (error) {
|
||||
@@ -274,6 +292,50 @@ const save = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
// 重置表单数据
|
||||
const resetForm = async () => {
|
||||
try {
|
||||
// 重置editForm为初始值
|
||||
editForm.value = {
|
||||
id: '',
|
||||
definitionId: '',
|
||||
definitionBusNo: '',
|
||||
contentJson: '',
|
||||
statusEnum: 1,
|
||||
organizationId: 0,
|
||||
encounterId: '',
|
||||
patientId: '',
|
||||
recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
createBy: '',
|
||||
source: '',
|
||||
};
|
||||
|
||||
// 先将组件设置为空,强制卸载
|
||||
const currentComponentName = currentComponent.value;
|
||||
if (currentComponentName) {
|
||||
currentComponent.value = '';
|
||||
|
||||
// 等待DOM更新
|
||||
await nextTick();
|
||||
|
||||
// 重新加载组件
|
||||
currentComponent.value = currentComponentName;
|
||||
|
||||
// 再次等待DOM更新后设置空数据
|
||||
await nextTick();
|
||||
}
|
||||
|
||||
// 重置动态组件表单数据
|
||||
if (emrComponentRef.value && emrComponentRef.value.setFormData) {
|
||||
emrComponentRef.value.setFormData({});
|
||||
}
|
||||
|
||||
ElMessage.success('表单已重置');
|
||||
} catch (error) {
|
||||
ElMessage.error('重置表单失败');
|
||||
}
|
||||
};
|
||||
|
||||
const historyRef = ref(null);
|
||||
const handleHistoryClick = (data) => {
|
||||
newEmr();
|
||||
@@ -282,6 +344,108 @@ const handleHistoryClick = (data) => {
|
||||
emrComponentRef.value?.setFormData(JSON.parse(editForm.value.contentJson));
|
||||
});
|
||||
};
|
||||
|
||||
// 默认选中门诊病历模板
|
||||
const selectOutpatientMedicalRecordTemplate = async () => {
|
||||
if (!templateData.value || templateData.value.length === 0) {
|
||||
await queryTemplateTree();
|
||||
}
|
||||
|
||||
// 查找门诊病历模板
|
||||
const findOutpatientTemplate = (nodes) => {
|
||||
for (const node of nodes) {
|
||||
if (node.children && node.children.length > 0) {
|
||||
const found = findOutpatientTemplate(node.children);
|
||||
if (found) return found;
|
||||
}
|
||||
if (
|
||||
node.document &&
|
||||
node.document.name &&
|
||||
(node.document.name.includes('门诊病历') ||
|
||||
node.document.name === '门诊病历 (1.0.0)' ||
|
||||
node.document.name === '门诊病历(1.0.0)')
|
||||
) {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const outpatientTemplateNode = findOutpatientTemplate(templateData.value);
|
||||
if (outpatientTemplateNode) {
|
||||
//选中节点
|
||||
nextTick(() => {
|
||||
if (templateTree.value && outpatientTemplateNode.id) {
|
||||
templateTree.value.setCurrentKey(outpatientTemplateNode.id);
|
||||
}
|
||||
|
||||
// 选中门诊病历模板
|
||||
handleNodeClick(outpatientTemplateNode, {
|
||||
isLeaf: true,
|
||||
data: outpatientTemplateNode,
|
||||
});
|
||||
|
||||
// 等待模板加载完成,然后获取并回显最新病历数据
|
||||
setTimeout(() => {
|
||||
historyRef.value?.queryList();
|
||||
loadLatestMedicalRecord();
|
||||
}, 500);
|
||||
});
|
||||
} else {
|
||||
ElMessage.info('未找到门诊病历模板');
|
||||
}
|
||||
};
|
||||
|
||||
// 当前选中的历史病历ID,用于在History组件中高亮显示
|
||||
const selectedHistoryRecordId = ref('');
|
||||
|
||||
// 加载最新的病历数据并回显
|
||||
const loadLatestMedicalRecord = async () => {
|
||||
if (!patientInfo.value.encounterId || !currentSelectTemplate.value.id) return;
|
||||
|
||||
loading.value = true;
|
||||
try {
|
||||
// 获取患者的历史病历记录
|
||||
const res = await getRecordByEncounterIdList({
|
||||
isPage: 0,
|
||||
encounterId: patientInfo.value.encounterId,
|
||||
patientId: patientInfo.value.patientId,
|
||||
definitionId: currentSelectTemplate.value.id,
|
||||
});
|
||||
|
||||
const historyRecords = res.data || [];
|
||||
if (historyRecords.length > 0) {
|
||||
// 按时间排序,获取最新的病历记录
|
||||
historyRecords.sort((a, b) => new Date(b.recordTime) - new Date(a.recordTime));
|
||||
const latestRecord = historyRecords[0];
|
||||
|
||||
// 保存最新病历ID,用于在History组件中高亮显示
|
||||
selectedHistoryRecordId.value = latestRecord.id;
|
||||
|
||||
// 自动回显最新病历数据到模板
|
||||
editForm.value = latestRecord;
|
||||
nextTick(() => {
|
||||
if (emrComponentRef.value && latestRecord.contentJson) {
|
||||
emrComponentRef.value.setFormData(JSON.parse(latestRecord.contentJson));
|
||||
}
|
||||
|
||||
// 通知History组件更新选中状态
|
||||
if (historyRef.value && typeof historyRef.value.updateSelectedRecord === 'function') {
|
||||
historyRef.value.updateSelectedRecord(latestRecord.id);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 清空选中状态
|
||||
selectedHistoryRecordId.value = '';
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('加载最新病历数据失败');
|
||||
// 出错时也清空选中状态
|
||||
selectedHistoryRecordId.value = '';
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
const templateRef = ref(null);
|
||||
|
||||
const handleTemplateClick = (data) => {
|
||||
@@ -299,39 +463,77 @@ const templateEdit = (data) => {
|
||||
const templateEditVisible = ref(false);
|
||||
// const templateEditSubmitOk = () => {};
|
||||
|
||||
// 打印方法实现
|
||||
// 定义病历模板类型与打印模板的映射关系
|
||||
const templateToPrintTemplateMap = {
|
||||
// 手术记录相关模板
|
||||
手术记录: PRINT_TEMPLATE.OPERATIVE_RECORD,
|
||||
'手术记录(1.0.0)': PRINT_TEMPLATE.OPERATIVE_RECORD,
|
||||
tySurgicalRecord: PRINT_TEMPLATE.OPERATIVE_RECORD,
|
||||
// 门诊病历相关模板
|
||||
门诊病历: PRINT_TEMPLATE.HQOUTPATIENT_MEDICAL_RECORD,
|
||||
'门诊病历(1.0.0)': PRINT_TEMPLATE.HQOUTPATIENT_MEDICAL_RECORD,
|
||||
测试新增: PRINT_TEMPLATE.HQOUTPATIENT_MEDICAL_RECORD,
|
||||
};
|
||||
|
||||
// 根据模板名称获取对应的打印模板
|
||||
const getPrintTemplateByTemplateName = (templateName) => {
|
||||
// 默认使用门诊病历模板
|
||||
let printTemplate = PRINT_TEMPLATE.OUTPATIENT_MEDICAL_RECORD;
|
||||
|
||||
if (templateName) {
|
||||
for (const [key, value] of Object.entries(templateToPrintTemplateMap)) {
|
||||
if (templateName.includes(key)) {
|
||||
printTemplate = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return printTemplate;
|
||||
};
|
||||
|
||||
// 打印
|
||||
const print = async () => {
|
||||
try {
|
||||
// 检查是否有选中的病历模板
|
||||
if (!currentSelectTemplate.value || !currentSelectTemplate.value.id) {
|
||||
ElMessage.warning('请先选择病历模板');
|
||||
return;
|
||||
}
|
||||
// 检查是否已保存
|
||||
if (!editForm.value.id || editForm.value.id === '') {
|
||||
ElMessage.warning('请先保存病历后再进行打印');
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取当前病历组件的表单数据
|
||||
const formData = emrComponentRef.value?.formData || {};
|
||||
|
||||
// 准备打印数据(不依赖子组件的getPrintData方法)
|
||||
// const printData = {
|
||||
// // 使用当前选中的模板信息
|
||||
// templateInfo: currentSelectTemplate.value,
|
||||
// // 添加患者信息
|
||||
// patientInfo: props.patientInfo,
|
||||
// // 添加打印时间
|
||||
// printTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
// // 添加基本病历信息
|
||||
// emrInfo: {
|
||||
// documentName: currentSelectTemplate.value.name || '住院病历',
|
||||
// documentId: currentSelectTemplate.value.id || '',
|
||||
// encounterId: props.patientInfo.encounterId || '',
|
||||
// patientId: props.patientInfo.patientId || '',
|
||||
// recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
// },
|
||||
// // 添加病历表单数据(包含红框内的所有字段)
|
||||
// formData: formData,
|
||||
// doctorName: userStore.nickName,
|
||||
// };
|
||||
// 获取诊断数据
|
||||
let diagnosisList = [];
|
||||
let diagnosisText = '';
|
||||
if (props.patientInfo && props.patientInfo.encounterId) {
|
||||
try {
|
||||
const diagnosisRes = await getEncounterDiagnosis(props.patientInfo.encounterId);
|
||||
diagnosisList = diagnosisRes.data || [];
|
||||
// 格式化诊断文本,区分主诊断和其他诊断
|
||||
diagnosisText = diagnosisList
|
||||
.map((item) => {
|
||||
const prefix = item.maindiseFlag === 1 ? '[主]' : '';
|
||||
return `${prefix}${item.name || ''}`;
|
||||
})
|
||||
.join(';');
|
||||
} catch (error) {
|
||||
ElMessage.error('获取诊断数据失败');
|
||||
}
|
||||
}
|
||||
|
||||
// 获取当前模板名称
|
||||
const templateName = currentSelectTemplate.value.name || '';
|
||||
|
||||
// 根据模板名称获取对应的打印模板
|
||||
const selectedPrintTemplate = getPrintTemplateByTemplateName(templateName);
|
||||
|
||||
// 打印数据
|
||||
const printData = {
|
||||
// 模板信息
|
||||
templateName: currentSelectTemplate.value.name || '住院病历',
|
||||
@@ -355,21 +557,42 @@ const print = async () => {
|
||||
department: props.patientInfo.department || '',
|
||||
attendingDoctor: props.patientInfo.attendingDoctor || '',
|
||||
|
||||
// 诊断信息
|
||||
diagnosisList: JSON.stringify(diagnosisList),
|
||||
diagnosisText: diagnosisText,
|
||||
|
||||
// 病历信息
|
||||
documentName: currentSelectTemplate.value.name || '住院病历',
|
||||
documentId: currentSelectTemplate.value.id || '',
|
||||
recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
printTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
|
||||
|
||||
//病历号
|
||||
busNo: props.patientInfo.busNo || '',
|
||||
//费用类型
|
||||
contractName: props.patientInfo.contractName || '',
|
||||
|
||||
// 表单数据 - 需要将嵌套结构展开
|
||||
...flattenObject(formData),
|
||||
};
|
||||
console.log('打印数据:', printData);
|
||||
|
||||
// 执行打印,使用根据模板类型选择的打印模板
|
||||
await simplePrint(selectedPrintTemplate, printData);
|
||||
|
||||
// 调用打印记录接口
|
||||
try {
|
||||
await recordPrint(editForm.value.id);
|
||||
|
||||
// 刷新历史记录列表,确保删除按钮状态根据最新的printCount值更新
|
||||
historyRef.value?.queryList();
|
||||
} catch (printLogError) {
|
||||
ElMessage.error('保存打印记录失败');
|
||||
// 打印记录失败不影响打印成功提示
|
||||
}
|
||||
|
||||
// 执行打印
|
||||
await simplePrint(PRINT_TEMPLATE.OUTPATIENT_MEDICAL_RECORD, printData);
|
||||
ElMessage.success('打印成功');
|
||||
} catch (error) {
|
||||
console.error('打印失败:', error);
|
||||
ElMessage.error('打印失败: ' + (error.message || '未知错误'));
|
||||
}
|
||||
};
|
||||
@@ -403,44 +626,100 @@ const templateEditSubmitOk = () => {
|
||||
historyRef.value?.queryList();
|
||||
templateRef.value?.queryList();
|
||||
};
|
||||
// onBeforeMount(() => {});
|
||||
// 刚进页面默认显示门诊病历
|
||||
|
||||
// 选择默认模板 - 获取门诊病历分类下的第一个模板
|
||||
const selectDefaultTemplate = () => {
|
||||
nextTick(() => {
|
||||
// 查找门诊病历(1.0.0)节点
|
||||
const findTemplate = (nodes) => {
|
||||
if (!templateData.value || templateData.value.length === 0) {
|
||||
console.log('模板数据为空,无法选择默认模板');
|
||||
return;
|
||||
}
|
||||
|
||||
// 查找门诊病历分类节点,然后获取其下的第一个模板
|
||||
const findOutpatientRecordCategoryAndFirstTemplate = (nodes) => {
|
||||
for (const node of nodes) {
|
||||
// 检查是否是门诊病历分类节点
|
||||
if (!node.document && node.name && node.name.includes('门诊病历')) {
|
||||
// 这是一个分类节点,检查是否有子节点
|
||||
if (node.children && node.children.length > 0) {
|
||||
// 返回第一个有document属性的子节点(即第一个模板)
|
||||
for (const child of node.children) {
|
||||
if (child.document) {
|
||||
return child;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 递归查找子节点
|
||||
if (node.children && node.children.length > 0) {
|
||||
const found = findTemplate(node.children);
|
||||
const found = findOutpatientRecordCategoryAndFirstTemplate(node.children);
|
||||
if (found) {
|
||||
return found;
|
||||
}
|
||||
}
|
||||
// 根据ID查找门诊病历模板
|
||||
if (node.document && node.document.id === '1963474077201162242') {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const defaultTemplate = findTemplate(templateData.value);
|
||||
const defaultTemplate = findOutpatientRecordCategoryAndFirstTemplate(templateData.value);
|
||||
if (defaultTemplate) {
|
||||
// 模拟点击节点
|
||||
const mockNode = {
|
||||
isLeaf: true,
|
||||
};
|
||||
handleNodeClick(defaultTemplate, mockNode);
|
||||
nextTick(() => {
|
||||
templateTree.value?.setCurrentKey(defaultTemplate.id);
|
||||
// 模拟点击节点
|
||||
const mockNode = {
|
||||
isLeaf: true,
|
||||
};
|
||||
handleNodeClick(defaultTemplate, mockNode);
|
||||
|
||||
// 直接加载最新病历数据,不再使用额外的setTimeout延迟
|
||||
// 因为handleNodeClick中已经有nextTick和setTimeout处理组件渲染
|
||||
loadLatestMedicalRecord();
|
||||
});
|
||||
} else {
|
||||
console.log('未找到门诊病历模板');
|
||||
}
|
||||
});
|
||||
};
|
||||
// 监听患者信息变化,实现联动显示
|
||||
watch(
|
||||
() => props.patientInfo,
|
||||
(newPatientInfo) => {
|
||||
// 当患者信息变化时,默认选中门诊病历模板并加载最新病历数据
|
||||
if (newPatientInfo && newPatientInfo.patientId && Object.keys(newPatientInfo).length > 0) {
|
||||
// 确保模板树已经加载
|
||||
if (templateData.value && templateData.value.length > 0) {
|
||||
// 优先尝试使用更精确的selectDefaultTemplate函数
|
||||
selectDefaultTemplate();
|
||||
} else {
|
||||
// 重新加载模板树
|
||||
queryTemplateTree().then(() => {
|
||||
// 使用nextTick确保DOM更新,移除setTimeout避免多次渲染
|
||||
nextTick(() => {
|
||||
selectDefaultTemplate();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
|
||||
onMounted(async () => {
|
||||
console.log('hospitalizationEmr mounted', userStore);
|
||||
await queryTemplateTree();
|
||||
selectDefaultTemplate();
|
||||
// 组件挂载完成后,如果已有患者信息,默认选中门诊病历模板
|
||||
if (
|
||||
props.patientInfo &&
|
||||
props.patientInfo.patientId &&
|
||||
Object.keys(props.patientInfo).length > 0
|
||||
) {
|
||||
// 使用nextTick确保模板树数据已更新
|
||||
nextTick(() => {
|
||||
selectDefaultTemplate();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
defineExpose({ state });
|
||||
// defineExpose({ state }); // state未使用
|
||||
|
||||
const disNode = () => {
|
||||
leftShow.value = !leftShow.value;
|
||||
@@ -554,12 +833,29 @@ const disNode_R = () => {
|
||||
}
|
||||
|
||||
.operate-main {
|
||||
height: calc(100vh - 150px);
|
||||
flex: auto;
|
||||
flex: 1;
|
||||
min-height: 0; /* 允许flex子项高度收缩 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.operate-main .template-tree-scrollbar {
|
||||
height: 100%;
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
min-height: 0;
|
||||
/* 确保滚动条样式正常 */
|
||||
-ms-overflow-style: auto;
|
||||
scrollbar-width: auto;
|
||||
}
|
||||
/* 确保动态加载的组件不会破坏布局 */
|
||||
.operate-main .template-tree-scrollbar > .loading-container {
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
/* 确保组件内部内容不会溢出 */
|
||||
.operate-main .template-tree-scrollbar > * {
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -581,4 +877,10 @@ const disNode_R = () => {
|
||||
transition-duration: 300ms;
|
||||
}
|
||||
}
|
||||
|
||||
/* 加载状态样式 */
|
||||
.loading-container {
|
||||
min-height: 400px;
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<span>{{ item.prescriptionNo }}</span>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
<h2>长春大学医院</h2>
|
||||
<h2>长春市朝阳区中医院医院</h2>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
<h3>处方单</h3>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user