|
@@ -33,15 +33,15 @@
|
|
|
</el-select>
|
|
|
手术编码:
|
|
|
<el-input
|
|
|
- v-model.number="ssCode"
|
|
|
+ v-model="ssCode"
|
|
|
+ @blur="ssCode = ssCode.trim()"
|
|
|
clearable
|
|
|
- type="number"
|
|
|
placeholder="请输入手术编码"
|
|
|
style="width: 120px"/>
|
|
|
<el-tag type="danger"> 项目总价:{{ xiangMuZongJia }}</el-tag>
|
|
|
</div>
|
|
|
<div class="layout_flex_1-y">
|
|
|
- <el-table :data="feiYongShuJu"
|
|
|
+ <el-table :data="saveData"
|
|
|
height="100%"
|
|
|
highlight-current-row
|
|
|
stripe
|
|
@@ -193,7 +193,7 @@
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
|
|
|
-<script setup>
|
|
|
+<script setup lang="ts">
|
|
|
import {computed, onMounted, ref, watch} from 'vue'
|
|
|
import {
|
|
|
getBingQuDuiYingKeShi,
|
|
@@ -209,15 +209,22 @@ import {getRenYuan} from '@/api/public-api'
|
|
|
import {ElMessage, ElMessageBox} from 'element-plus'
|
|
|
import {clone} from '@/utils/clone'
|
|
|
import HuoQuMuBan from './HuoQuMuBan.vue'
|
|
|
-import {stringIsBlank} from "@/utils/blank-utils";
|
|
|
+import {stringIsBlank, stringNotBlank} from "@/utils/blank-utils";
|
|
|
import {BizException, ExceptionEnum} from "@/utils/BizException";
|
|
|
import {useUserStore} from "@/pinia/user-store";
|
|
|
+import cyRefList from "@/utils/cyRefList";
|
|
|
+import Dig from "@/utils/math";
|
|
|
+import XEUtils from "xe-utils";
|
|
|
|
|
|
-const props = defineProps({
|
|
|
+const props = defineProps<{
|
|
|
patient: {
|
|
|
- type: Object,
|
|
|
- },
|
|
|
-})
|
|
|
+ inpatientNo: string;
|
|
|
+ admissTimes: number;
|
|
|
+ zySerialNo: string;
|
|
|
+ referPhysician: string;
|
|
|
+ ledgerSn: number
|
|
|
+ }
|
|
|
+}>()
|
|
|
|
|
|
const emits = defineEmits(['theUploadIsSuccessful'])
|
|
|
|
|
@@ -233,35 +240,50 @@ const queryWard = ref('')
|
|
|
|
|
|
const xiaoKeShiList = ref([])
|
|
|
|
|
|
+declare type ChargeCodeType = {
|
|
|
+ chargeCodeMx: string;
|
|
|
+ serial: string;
|
|
|
+ chargeName: string
|
|
|
+ deptCode: string;
|
|
|
+ chargeAmount: number
|
|
|
+ amount: number
|
|
|
+}
|
|
|
+
|
|
|
+const [saveData, saveProxy] = cyRefList<ChargeCodeType>((item) => {
|
|
|
+ return item.chargeCodeMx.trim() + "_" + item.serial.trim();
|
|
|
+}, (item) => {
|
|
|
+ return `项目【${item.chargeName}】请勿重复添加`
|
|
|
+});
|
|
|
+
|
|
|
// 获取选择的数据
|
|
|
-const xuanZeXiangMuTable = ({val: value}) => {
|
|
|
+const xuanZeXiangMuTable = (value) => {
|
|
|
for (let i = 0; i < value.length; i++) {
|
|
|
const item = value[i];
|
|
|
- let key;
|
|
|
- if (item.serial !== '00') {
|
|
|
- key = item.chargeCodeMx.trim() + item.serial.trim()
|
|
|
- } else {
|
|
|
- key = item.chargeCodeMx.trim()
|
|
|
- }
|
|
|
- if (chargeCode.value.indexOf(key) === -1) {
|
|
|
- chargeCode.value.push(key);
|
|
|
- item.deptCode = userStore.deptCode;
|
|
|
- feiYongShuJu.value.push(item);
|
|
|
- }
|
|
|
+ item.deptCode = userStore.deptCode;
|
|
|
}
|
|
|
+ saveProxy.push(...value)
|
|
|
}
|
|
|
|
|
|
const chargeCode = ref([])
|
|
|
|
|
|
-const feiYongShuJu = ref([])
|
|
|
-
|
|
|
const shangChuanXiangMu = () => {
|
|
|
-
|
|
|
- if (operationRoom() && stringIsBlank(ssCode)) {
|
|
|
+ if (operationRoom() && stringIsBlank(ssCode.value)) {
|
|
|
BizException(ExceptionEnum.LOGICAL_ERROR, "请填写手术编码。");
|
|
|
}
|
|
|
|
|
|
- let shangChuanFeiYong = {
|
|
|
+ if (operationRoom() && stringNotBlank(ssCode.value) && !XEUtils.isStringNumber(ssCode.value)) {
|
|
|
+ BizException(ExceptionEnum.LOGICAL_ERROR, "手术编码必须纯数字且中间不得有空格。");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (stringIsBlank(props.patient.inpatientNo)) {
|
|
|
+ BizException(ExceptionEnum.LOGICAL_ERROR, "请先选择患者。");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (saveData.value.length === 0) {
|
|
|
+ BizException(ExceptionEnum.LOGICAL_ERROR, "请先选择上传数据。");
|
|
|
+ }
|
|
|
+
|
|
|
+ const shangChuanFeiYong = {
|
|
|
// 这里又要反回来 就尼玛坑爹 我也不知道为什么
|
|
|
dept: queryWard.value,
|
|
|
ward: queryDept.value,
|
|
@@ -270,24 +292,19 @@ const shangChuanXiangMu = () => {
|
|
|
zySerialNo: props.patient.zySerialNo,
|
|
|
ssCode: ssCode.value,
|
|
|
referPhysician: props.patient.referPhysician,
|
|
|
- list: feiYongShuJu.value,
|
|
|
+ list: saveData.value,
|
|
|
orderNo: 3,
|
|
|
ledgerSn: props.patient.ledgerSn,
|
|
|
};
|
|
|
|
|
|
-
|
|
|
- if (feiYongShuJu.value.length === 0) {
|
|
|
- return ElMessage.error('请先选择上传数据。')
|
|
|
- }
|
|
|
-
|
|
|
//在此处上传
|
|
|
- ElMessageBox.confirm('共上传【' + feiYongShuJu.value.length + '】条', '请认真核对', {
|
|
|
+ ElMessageBox.confirm('共上传【' + saveData.value.length + '】条', '请认真核对', {
|
|
|
cancelButtonText: '取消',
|
|
|
confirmButtonText: '确定',
|
|
|
})
|
|
|
.then(() => {
|
|
|
xiangMuFeiYongShangChuan(shangChuanFeiYong).then(() => {
|
|
|
- feiYongShuJu.value = []
|
|
|
+ saveData.value = []
|
|
|
chargeCode.value = []
|
|
|
emits('theUploadIsSuccessful')
|
|
|
})
|
|
@@ -297,8 +314,7 @@ const shangChuanXiangMu = () => {
|
|
|
}
|
|
|
|
|
|
const shanChuXiangMuClick = (val) => {
|
|
|
- feiYongShuJu.value.splice(val, 1)
|
|
|
- chargeCode.value.splice(val, 1)
|
|
|
+ saveProxy.delIndex(val)
|
|
|
}
|
|
|
// 新增项目或者药品
|
|
|
const xinZhengXiangMuDialog = ref(false)
|
|
@@ -324,38 +340,21 @@ const rmChargePyCode = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const danGeXiangMuBaoCun = (val) => {
|
|
|
- let key
|
|
|
- if (xiangMuHuoYaoPinFlag.value === 1) {
|
|
|
- key = val.chargeCodeMx.trim() + val.serial.trim()
|
|
|
- } else {
|
|
|
- key = val.chargeCodeMx.trim()
|
|
|
- }
|
|
|
-
|
|
|
- if (chargeCode.value.indexOf(key) > -1) {
|
|
|
- return ElMessage.warning({
|
|
|
- message: '请勿重复录入',
|
|
|
- showClose: true,
|
|
|
- })
|
|
|
- } else {
|
|
|
- if (typeof val.deptCode === 'undefined') {
|
|
|
- val.deptCode = userStore.deptCode
|
|
|
- }
|
|
|
- feiYongShuJu.value.push(val)
|
|
|
- chargeCode.value.push(key)
|
|
|
- ElMessage.success({
|
|
|
- message: '添加成功',
|
|
|
- showClose: true,
|
|
|
- })
|
|
|
+const danGeXiangMuBaoCun = (val: ChargeCodeType) => {
|
|
|
+ if (stringIsBlank(val.deptCode)) {
|
|
|
+ val.deptCode = userStore.deptCode
|
|
|
}
|
|
|
+ saveProxy.push(val);
|
|
|
}
|
|
|
|
|
|
const xiangMuZongJia = computed(() => {
|
|
|
let sum = 0
|
|
|
- for (let i = 0; i < feiYongShuJu.value.length; i++) {
|
|
|
- sum += feiYongShuJu.value[i].chargeAmount * feiYongShuJu.value[i].amount
|
|
|
- }
|
|
|
- return sum.toFixed(2)
|
|
|
+
|
|
|
+ saveData.value.forEach((item) => {
|
|
|
+ sum += Dig.multiply(item.chargeAmount, item.amount)
|
|
|
+ })
|
|
|
+
|
|
|
+ return XEUtils.toFixed(sum, 2)
|
|
|
})
|
|
|
|
|
|
// 以下是保存模板
|
|
@@ -382,7 +381,7 @@ const zhuanPinYin = () => {
|
|
|
}
|
|
|
|
|
|
const baoCunMuBan = () => {
|
|
|
- if (feiYongShuJu.value.length === 0) {
|
|
|
+ if (saveData.value.length === 0) {
|
|
|
ElMessage.error({
|
|
|
message: '请先选择项目',
|
|
|
showClose: true,
|
|
@@ -396,7 +395,7 @@ const baoCunMuBan = () => {
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
- cunMuBanPojo.value.list = clone(feiYongShuJu.value)
|
|
|
+ cunMuBanPojo.value.list = clone(saveData.value)
|
|
|
// 开始上传
|
|
|
shangChuanMuBan(cunMuBanPojo.value).then(() => {
|
|
|
cunMuBanPojo.value = {}
|
|
@@ -412,8 +411,8 @@ const getBingQuDuiYingKeShiChange = () => {
|
|
|
const zhiXingKeShi = ref(userStore.deptCode)
|
|
|
|
|
|
const xieGaiZhiXingKeShi = () => {
|
|
|
- for (let i = 0; i < feiYongShuJu.value.length; i++) {
|
|
|
- feiYongShuJu.value[i].deptCode = zhiXingKeShi.value
|
|
|
+ for (let i = 0; i < saveData.value.length; i++) {
|
|
|
+ saveData.value[i].deptCode = zhiXingKeShi.value
|
|
|
}
|
|
|
}
|
|
|
|