Files
his/openhis-ui-vue3/src/views/medicationmanagement/purchaseDocument/index.vue

1843 lines
63 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container" v-loading="pageLoading" loading-text="审批中。。。">
<el-row :gutter="10" class="mb8" v-if="viewStatus">
<el-col :span="1.5">
<el-button v-if="viewStatus != 'view'" plain type="primary" icon="Edit" @click="handelApply"
>审批通过</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
v-if="viewStatus != 'view'"
type="primary"
plain
icon="Edit"
@click="handleReject"
>驳回</el-button
>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8" v-else>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="submitAudit">提交审核</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="EditPen" @click="handleTotalAmount">
计算金额
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleSave">批量保存</el-button>
</el-col>
</el-row>
<el-button type="primary" icon="View" @click="handlePrintPreview"> 预览单据 </el-button>
<el-button type="success" plain icon="Printer" @click="handlePrint"> 打印单据 </el-button>
<el-form
:model="receiptHeaderForm"
ref="receiptHeaderRef"
:inline="true"
label-width="100px"
:rules="rules"
>
<el-form-item label="单据号:" prop="busNo">
<el-input
v-model="receiptHeaderForm.busNo"
placeholder="单据号:"
clearable
style="width: 200px"
:disabled="true"
/>
</el-form-item>
<el-form-item label="经手人:" prop="practitionerId" label-width="120px">
<el-select
v-model="receiptHeaderForm.practitionerId"
placeholder=""
clearable
filterable
:disabled="viewStatus == 'view'"
style="width: 150px"
>
<el-option
v-for="practitioner in practitionerListOptions"
:key="practitioner.value"
:label="practitioner.label"
:value="practitioner.value"
/>
</el-select>
</el-form-item>
<el-form-item label="制单日期:">
<el-date-picker
v-model="receiptHeaderForm.occurrenceTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
:disabled="viewStatus == 'view'"
/>
</el-form-item>
<el-form-item label="供应商:" prop="supplierId">
<el-select
v-model="receiptHeaderForm.supplierId"
placeholder=""
clearable
filterable
style="width: 150px"
:disabled="viewStatus == 'view'"
>
<el-option
v-for="supplier in supplierListOptions"
:key="supplier.value"
:label="supplier.label"
:value="supplier.value"
/>
</el-select>
</el-form-item>
<el-form-item label="药品类型:" prop="medicationType">
<el-select
v-model="receiptHeaderForm.medicationType"
placeholder=""
clearable
filterable
style="width: 150px"
:disabled="disabledForm"
@change="
(value) => {
itemType = value;
}
"
>
<el-option
v-for="itemType in purchase_type"
:key="itemType.value"
:label="itemType.label"
:value="itemType.value"
/>
</el-select>
</el-form-item>
<el-form-item label="仓库类型:" prop="purposeTypeEnum">
<el-select
v-model="receiptHeaderForm.purposeTypeEnum"
placeholder=""
clearable
style="width: 150px"
:disabled="disabledForm"
@change="handleChangeLocationType"
>
<el-option
v-for="dict in warehous_type"
:key="dict.value"
:label="dict.label"
:disabled="disabledForm"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<el-tabs type="border-card">
<el-tab-pane label="入库单明细">
<el-row :gutter="10" class="mb8" v-if="!viewStatus">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="addNewRow">添加行</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="deleteSelectedRows"
>删除行</el-button
>
</el-col>
</el-row>
<el-form :model="form" :rules="tableRules" ref="formRef" :disabled="viewStatus == 'apply'">
<!-- @cell-mouse-enter="handleMouseEnter" -->
<!-- v-click-outside-row="handleClickOutside" @row-click="handleRowClick" 点击行以外的部分自动保存 -->
<el-scrollbar height="calc(100vh - 500px)">
<el-table
row-key="rowKey"
v-loading="loading"
:data="form.purchaseinventoryList"
@selection-change="handleSelectionChange"
ref="tableRef"
@cell-mouse-leave="handleMouseLeave"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="项目" align="center" key="name" prop="name" width="200" fixed>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.name`"
:rules="tableRules.name"
>
<el-input
v-if="viewStatus == 'view'"
v-model="scope.row.name"
placeholder=""
disabled
/>
<PopoverList
v-else
@search="handleSearch"
:width="1000"
:modelValue="scope.row.name"
>
<template #popover-content="{}">
<MedicineList
@selectRow="(row) => selectRow(row, scope.$index)"
:searchKey="medicineSearchKey"
:itemType="itemType"
/>
</template>
</PopoverList>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="规格"
align="center"
key="statusEnum_enumText"
prop="statusEnum_enumText"
width="150"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.volume`"
:rules="tableRules.volume"
>
<el-input v-model="scope.row.volume" placeholder="" disabled />
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="厂家/产地"
align="center"
key="manufacturer"
prop="manufacturer"
:show-overflow-tooltip="true"
width="160"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.manufacturer`"
:rules="tableRules.manufacturer"
>
<el-input v-model="scope.row.manufacturer" placeholder="" disabled />
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="仓库"
align="center"
key="purposeLocationId"
prop="purposeLocationId"
:show-overflow-tooltip="true"
width="180"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.purposeLocationId`"
:rules="tableRules.purposeLocationId"
>
<div class="select_wrapper_div">
<el-select
v-model="scope.row.purposeLocationId"
placeholder="请选择仓库"
:class="{ 'error-border': scope.row.error }"
clearable
:disabled="viewStatus == 'view'"
>
<el-option
v-for="(item, index) in locationList"
:key="index"
:label="item.name"
:value="item.id"
@click="handleLocationClick(item, scope.row, scope.$index)"
/>
</el-select>
</div>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="采购数量"
align="center"
key="itemQuantity"
prop="itemQuantity"
width="120"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.itemQuantity`"
:rules="tableRules.itemQuantity"
>
<div class="select_wrapper_div">
<el-input
:disabled="viewStatus == 'view'"
v-model="scope.row.itemQuantity"
placeholder=""
@blur="handleTotalPrice(scope.$index)"
:class="{ 'error-border': scope.row.error }"
/>
</div>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="计量单位"
align="center"
key="unitCode"
prop="unitCode"
:show-overflow-tooltip="true"
width="90"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.unitCode`"
:rules="tableRules.unitCode"
>
<!-- :disabled="data.isEdit" -->
<div class="select_wrapper_div">
<el-select
v-model="scope.row.unitCode"
placeholder=" "
:class="{ 'error-border': scope.row.error }"
:clearable="false"
:disabled="viewStatus == 'view'"
@change="(value) => handleUnitCodeChange(scope.row, scope.$index, value)"
>
<template v-if="scope.row.unitList && scope.row.partPercent > 1">
<el-option
:label="scope.row.unitList.unitCode_dictText"
:value="scope.row.unitList.unitCode"
/>
<el-option
:label="scope.row.unitList.minUnitCode_dictText"
:value="scope.row.unitList.minUnitCode"
/>
</template>
<template v-if="scope.row.unitList && scope.row.partPercent == 1">
<el-option
:label="scope.row.unitList.unitCode_dictText"
:value="scope.row.unitList.unitCode"
/>
</template>
<template v-if="!scope.row.unitList">
<el-option
:label="scope.row.unitCode_dictText"
:value="scope.row.unitCode"
/>
</template>
</el-select>
</div>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="药品追溯码"
align="center"
key="traceNo"
prop="traceNo"
width="130"
>
<template #default="scope">
<el-tooltip
:content="formatContent(scope.row.traceNo)"
placement="top"
popper-class="custom-tooltip"
>
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.traceNo`"
:rules="tableRules.traceNo"
>
<el-input
:disabled="viewStatus == 'view'"
v-model="scope.row.traceNo"
@change="(value) => handleTraceNoInput(value, scope.row)"
placeholder=""
:id="'traceNo' + `${scope.$index}`"
/>
</el-form-item>
</el-tooltip>
</template>
</el-table-column>
<el-table-column
label="追溯码包装"
align="center"
key="packagingLevels"
prop="packagingLevels"
width="130"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.packagingLevels`"
:rules="tableRules.packagingLevels"
>
<el-input
v-model="scope.row.packagingLevels"
placeholder=""
:disabled="viewStatus == 'view'"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="采购单价(包装单位) "
align="center"
key="price"
prop="price"
width="160"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.price`"
:rules="tableRules.price"
>
<div class="select_wrapper_div">
<el-input
v-model="scope.row.price"
placeholder=""
@blur="handleTotalPrice(scope.$index)"
:class="{ 'error-border': scope.row.error }"
:disabled="viewStatus == 'view'"
>
<template #suffix></template>
</el-input>
</div>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="合计金额 "
align="center"
key="totalPrice"
prop="totalPrice"
width="130"
>
<template #default="scope">
<el-form-item :prop="`purchaseinventoryList.${scope.$index}.totalPrice`">
<el-input disabled v-model="scope.row.totalPrice" placeholder="">
<template #suffix></template>
</el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="产品批号"
align="center"
key="lotNumber"
prop="lotNumber"
width="160"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.lotNumber`"
:rules="tableRules.lotNumber"
>
<el-input
v-model="scope.row.lotNumber"
placeholder=""
maxlength="100"
:disabled="viewStatus == 'view'"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="生产日期"
align="center"
key="startTime"
prop="startTime"
width="150"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.startTime`"
:rules="tableRules.startTime"
>
<el-date-picker
v-model="scope.row.startTime"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
:disabled="viewStatus == 'view'"
@change="changeValStart($event, scope.$index)"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="有效期至"
align="center"
key="endTime"
prop="endTime"
width="150"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.endTime`"
:rules="tableRules.endTime"
>
<el-date-picker
:disabled="viewStatus == 'view'"
v-model="scope.row.endTime"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
@change="changeValEnd($event, scope.$index)"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="发票号 "
align="center"
key="invoiceNo"
prop="invoiceNo"
width="130"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.invoiceNo`"
:rules="tableRules.invoiceNo"
>
<el-input
v-model="scope.row.invoiceNo"
placeholder=""
:disabled="viewStatus == 'view'"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" align="center" key="remake" prop="remake" width="130">
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.remake`"
:rules="tableRules.remake"
>
<el-input
v-model="scope.row.remake"
placeholder=""
:disabled="viewStatus == 'view'"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="货位"
align="center"
key="locationStoreName"
prop="locationStoreName"
width="180"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.locationStoreName`"
:rules="tableRules.locationStoreName"
>
<div class="select_wrapper_div">
<el-select
v-model="scope.row.locationStoreName"
placeholder="请选择货位"
:class="{ 'error-border': scope.row.error }"
clearable
:disabled="viewStatus == 'view'"
>
</el-select>
</div>
</el-form-item>
</template>
</el-table-column>
<el-table-column
label="总库存数量"
align="center"
key="quantity"
prop="quantity"
width="120"
>
<template #default="scope">
<el-form-item
:prop="`purchaseinventoryList.${scope.$index}.quantity`"
:rules="tableRules.quantity"
>
<el-input v-model="scope.row.quantity" placeholder="" disabled />
</el-form-item>
</template>
</el-table-column>
<el-table-column
v-if="!viewStatus"
label="操作"
align="center"
width="80"
class-name="small-padding fixed-width"
fixed="right"
>
<template #default="scope">
<el-button
link
type="primary"
icon="Edit"
@click="handleScan(scope.row, scope.$index)"
>扫码</el-button
>
</template>
</el-table-column>
</el-table>
</el-scrollbar>
</el-form>
</el-tab-pane>
</el-tabs>
<el-row
:gutter="10"
class="mb8"
style="margin-top: 15px; display: flex; align-items: center; justify-content: flex-start"
>
<el-col :span="3">
<span>制单人{{ userUserStore.name }}</span>
</el-col>
<!-- <el-col :span="2">
<span>审核人</span>
</el-col>
<el-col :span="2">
<span>单据状态</span>
</el-col> -->
<el-col :span="6">
<el-row :gutter="8" style="display: flex; align-items: center; justify-content: flex-start">
<el-col :span="10">
<span>合计金额{{ totalAmount ? totalAmount.toFixed(4) : 0 }}</span>
</el-col>
<!-- <el-col :span="10">
<el-input v-model="totalAmount" placeholder="" disabled />
</el-col> -->
</el-row>
</el-col>
</el-row>
<!-- </el-dialog> -->
<TraceNoDialog
:ypName="ypName"
:rowData="rowData"
:openDialog="openTraceNoDialog"
@submit="submit"
@cancel="openTraceNoDialog = false"
/>
</div>
</template>
<script setup name="PurchaseDocument">
import {
submitApproval,
addPurchaseinventory,
getInit,
delPurchaseinventory,
getPharmacyList,
getCount,
getDispensaryList,
getMedicineList,
getInitBusNo,
purchaseInventoryApproved,
reject,
getPharmacyListAll,
getDispensaryListAll,
} from './components/api';
const route = useRoute();
import PopoverList from '@/components/OpenHis/popoverList/index.vue';
import MedicineList from './components/medicineList.vue';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue';
import { formatDate, formatDateymd } from '@/utils/index';
import { useStore } from '@/store/store';
import useUserStore from '@/store/modules/user';
import { ElMessage } from 'element-plus';
import { nextTick, ref, watch, onMounted, onUnmounted } from 'vue';
import useTagsViewStore from '@/store/modules/tagsView';
import _, { isEqual } from 'lodash';
import { debounce } from 'lodash-es';
import templateJson from './components/templateJson.json';
import { hiprint } from 'vue-plugin-hiprint';
const router = useRouter();
const tagsViewStore = useTagsViewStore();
const userUserStore = useUserStore();
const store = useStore();
const rowData = ref({});
const { proxy } = getCurrentInstance();
const { warehous_type, category_code, service_type_code, specialty_code, purchase_type } =
proxy.useDict(
'warehous_type',
'category_code',
'service_type_code',
'specialty_code',
'purchase_type'
);
const viewStatus = ref('');
const startTimeOld = ref('');
const endTimeOld = ref('');
const purchaseinventoryList = ref([]);
const open = ref(false);
const loading = ref(false);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref('');
const visible = ref(false);
const row = ref({});
const openTraceNoDialog = ref(false);
const ypName = ref('');
const rowIndex = ref(-1);
const totalAmount = ref(0);
const editData = ref({});
const pageLoading = ref(false);
const form = reactive({
purchaseinventoryList: [],
});
const forms = reactive({
purchaseinventoryList: [],
});
const receiptHeaderForm = reactive({
busNo: undefined,
occurrenceTime: formatDate(new Date()),
});
const data = reactive({
isEdit: false,
isAdding: true,
queryParams: {
pageNo: 1,
pageSize: 10,
searchKey: undefined, // 供应商名称
busNo: undefined, // 编码
statusEnum: undefined, // 状态
supplierId: undefined, // 供应商ID
applyTimeStart: undefined, // 申请时间开始
practitionerId: undefined, // 经手人ID
},
rules: {
practitionerId: [{ required: true, message: '请选择经手人', trigger: 'change' }],
supplierId: [{ required: true, message: '请选择供应商', trigger: 'change' }],
purposeTypeEnum: [{ required: true, message: '请选择仓库类型', trigger: 'change' }],
medicationType: [{ required: true, message: '请选择药品类型', trigger: 'change' }],
},
tableRules: {
itemId: [{ required: true, message: '项目不能为空', trigger: 'blur' }],
statusEnum_enumText: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
unitCode: [{ required: true, message: '计量单位不能为空', trigger: 'blur' }],
purposeLocationId: [{ required: true, message: '目的仓库不能为空', trigger: 'blur' }],
// purposeLocationStoreId: [
// { required: true, message: "货位不能为空", trigger: "blur" },
// ],
lotNumber: [{ required: true, message: '产品批号不能为空', trigger: 'change' }],
// traceNo: [{ required: true, message: "追溯码不能为空", trigger: "blur" }],
startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
price: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
invoiceNo: [{ required: true, message: '发票号不能为空', trigger: 'blur' }],
totalPrice: [{ required: true, message: '总价不能为空', trigger: 'blur' }],
},
});
const { queryParams, rules, tableRules } = toRefs(data);
const itemTypeOptions = ref(undefined); // 入库项目类型
const practitionerListOptions = ref(undefined); // 查询经手人列表
const supplierListOptions = ref(undefined); // 供应商列表
const selectedRows = ref([]); // 用于存储选中的行
const emit = defineEmits(['refresh']);
const tableRef = ref(undefined); // 表格引用
const currentRow = ref({}); // 当前操作的行
const medicineSearchKey = ref('');
const itemType = ref('');
const price = ref(0);
const unitMap = ref({});
const currentEditRow = ref({});
const currentIndex = ref(-1);
const currentRowId = ref('');
const disabledForm = computed(() => {
return form.purchaseinventoryList.length > 0;
});
const rowList = ref([]);
const saveRowObject = ref({});
watch(
() => store.currentData,
(newVlaue) => {
console.log(newVlaue, '11212121212121');
if (newVlaue) {
editData.value.editRow = newVlaue?.editRow;
editData.value.item = newVlaue?.item;
edit();
} else {
editData.value = {};
show();
}
},
{ immediate: true }
);
watch(
() => route.query.view,
(newVlaue) => {
getPurchaseinventoryTypeList();
if (newVlaue) {
viewStatus.value = newVlaue;
} else {
viewStatus.value = '';
}
},
{ immediate: true }
);
watch(
() => form.purchaseinventoryList,
(newVlaue) => {
if (newVlaue && newVlaue.length > 0) {
if (viewStatus.value) {
handleTotalAmount();
}
}
},
{ immediate: true }
);
onMounted(() => {
document.addEventListener("click", handleClickOutside);
// 获取源仓库列表(假设 getPharmacyList 返回仓库数据)
getPharmacyList({ type: 'source' }).then(res => {
if (res.code === 200) {
sourceTypeListOptions.value = res.data; // 格式需为 [{id, name}, ...]
}
});
// 获取目的仓库列表
getPharmacyList({ type: 'purpose' }).then(res => {
if (res.code === 200) {
purposeTypeListOptions.value = res.data;
}
});
// 初始化默认仓库数据,使用药房类型(16)
handleChangeLocationType(16);
console.log(route, '!1212');
if (route.query.view) {
viewStatus.value = route.query.view;
// 查看模式下不要清空store数据让watch监听器自然处理
} else {
viewStatus.value = '';
// 正常进入模式下清空store数据确保显示空表单
store.clearCurrentData();
}
// 不再直接调用show()而是让watch监听器根据store.currentData状态来决定
});
// 关键修复在组件卸载时清除store数据确保离开页面后再次进入时不会显示历史记录
onUnmounted(() => {
document.removeEventListener("click", handleClickOutside);
// 只有在非查看模式下才清除store数据
if (!viewStatus.value) {
store.clearCurrentData();
}
});
function addNewRow() {
proxy.$refs['receiptHeaderRef'].validate((valid) => {
if (valid) {
// if (data.isAdding) {
// proxy.$message.warning('请先保存当前行后再新增!');
// return;
// }
const newRow = {
rowKey: Date.now(),
id: '',
itemTable: '',
itemQuantity: '',
itemId: '',
unitCode: '',
remake: '',
supplierId: '',
purposeTypeEnum: '',
// 使用表头的仓库作为新增行默认值,减少重复选择
purposeLocationId: receiptHeaderForm.purposeLocationId || null,
purposeLocationStoreId: null,
practitionerId: '',
traceNo: '',
invoiceNo: '',
startTime: '',
endTime: '',
price: '',
totalPrice: '',
sellPrice: '',
minSellPrice: '',
// locationInventoryList: [], // 库房列表
unitList: {}, // 单位列表
isEditing: true, // 标记当前行是否正在编辑
error: false, // 新增 error 字段
isSave: false, // 当前行是否保存
};
form.purchaseinventoryList.push(newRow);
data.isAdding = true; // 设置标志位为 true表示有未保存的
}
});
}
function handleBlur(row, index) {
let hasError = false;
if (!row.itemTable) {
if (receiptHeaderForm.medicationType === '1') {
row.itemTable = 'med_medication_definition';
} else {
row.itemTable = 'adm_device_definition';
}
}
row.practitionerId = receiptHeaderForm.practitionerId;
row.busNo = receiptHeaderForm.busNo;
row.occurrenceTime = receiptHeaderForm.occurrenceTime;
row.supplierId = receiptHeaderForm.supplierId;
row.purposeTypeEnum = receiptHeaderForm.purposeTypeEnum;
}
const handleMouseEnter = (row, column, cell, event) => {
// console.log('鼠标移入行', row);
};
const handleMouseLeave = (row, column, cell, event) => {
// handleBlur(row)
// if(row.id){ // 编辑
// let rows = JSON.parse(JSON.stringify(saveRowObject.value))
// delete rows.unitList
// let rowss= JSON.parse(JSON.stringify(row))
// delete rowss.unitList
// let purchaseinventoryIndex = form.purchaseinventoryList.findIndex(k=>k.id==row.id)
// if(!areObjectsEqual(rowss,rows)){
// handleSave(rowss,purchaseinventoryIndex)
// }
// }else{
// let rows = JSON.parse(JSON.stringify(saveRowObject.value))
// delete rows.unitList
// let rowss= JSON.parse(JSON.stringify(row))
// delete rowss.unitList
// console.log(form.purchaseinventoryList.length,form.purchaseinventoryList,"211111111")
// if(form.purchaseinventoryList.length==1){
// handleSave(row,0)
// }else if(form.purchaseinventoryList.length>1&&saveRowObject.value){
// if(!areObjectsEqual(rowss,rows)){
// handleSave(rowss,form.purchaseinventoryList.length-1)
// }
// }
// }
};
// 点击行时记录当前行
function handleRowClick(row) {
if (row.id != currentRowId.value) {
handleClickOutside();
}
currentEditRow.value = JSON.parse(JSON.stringify(row));
if (row.id) {
currentIndex.value = form.purchaseinventoryList.findIndex((item) => item.id == row.id);
currentRowId.value = row.id;
} else {
currentIndex.value = form.purchaseinventoryList.length - 1;
}
// handleBlur(row);
// if (row.id) {
// // 编辑
// let purchaseinventoryIndex = form.purchaseinventoryList.findIndex((k) => k.id == row.id);
// let rows = JSON.parse(JSON.stringify(forms.purchaseinventoryList[purchaseinventoryIndex]));
// delete rows.unitList;
// let rowss = JSON.parse(JSON.stringify(row));
// delete rowss.unitList;
// console.log(
// purchaseinventoryIndex,
// '编辑',
// forms.purchaseinventoryList[purchaseinventoryIndex],
// rowss,
// rows
// );
// if (!areObjectsEqual(rowss, rows)) {
// handleSave(rowss, purchaseinventoryIndex);
// }
// } else {
// let rows = JSON.parse(JSON.stringify(saveRowObject.value));
// delete rows.unitList;
// let rowss = JSON.parse(JSON.stringify(row));
// delete rowss.unitList;
// console.log(form.purchaseinventoryList.length, form.purchaseinventoryList, '211111111');
// if (form.purchaseinventoryList.length == 1) {
// handleSave(row, 0);
// } else if (form.purchaseinventoryList.length > 1 && saveRowObject.value) {
// if (!areObjectsEqual(rowss, rows)) {
// handleSave(rowss, form.purchaseinventoryList.length - 1);
// }
// }
// }
currentRow.value = row;
}
function areObjectsEqual(obj1, obj2) {
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (let key of keys1) {
if (obj1[key] !== obj2[key]) {
return false;
}
}
return true;
}
// 监听表格外的点击事件
// function handleClickOutside(event) {
// if (tableRef.value && !tableRef.value.$el.contains(event.target)) {
// if (currentRow.value) {
// // handleSave(currentRow.value);
// currentRow.value = null; // 清空当前行
// }
// }
// }
function saveRow(row, index) {
form.purchaseinventoryList[index] = row;
addPurchaseinventory(row).then((response) => {
reset();
data.isAdding = false; // 允许新增下一行
proxy.$message.success('保存成功!');
visible.value = false;
});
}
function handleScan(row, index) {
if (row.purposeLocationId && row.lotNumber) {
rowData.value = row;
rowData.value.locationId = row.purposeLocationId;
rowData.value.itemType = receiptHeaderForm.medicationType;
ypName.value = row.name;
openTraceNoDialog.value = true;
currentIndex.value = index;
} else {
proxy.$message.warning('请先选择仓库和产品批号!');
}
}
function submit(value) {
if (form.purchaseinventoryList[currentIndex.value].traceNo) {
form.purchaseinventoryList[currentIndex.value].traceNo =
form.purchaseinventoryList[currentIndex.value].traceNo + ',' + value;
} else {
form.purchaseinventoryList[currentIndex.value].traceNo = value;
}
openTraceNoDialog.value = false;
}
function formatContent(value) {
let content = '';
if (value) {
value.split(',').forEach((item, index) => {
content += `[${index + 1}] ${item}\n`;
});
return content;
}
}
// 药品列表搜索
function handleSearch(value) {
medicineSearchKey.value = value;
}
const locationList = ref([]);
// 选择药品
function selectRow(rowValue, index) {
form.purchaseinventoryList[index] = { id: form.purchaseinventoryList[index].id };
price.value = 0;
rowIndex.value = index;
form.purchaseinventoryList[index].rowKey = Date.now();
form.purchaseinventoryList[index].itemId = rowValue.definitionId;
form.purchaseinventoryList[index].name = rowValue.name;
form.purchaseinventoryList[index].volume = rowValue.volume;
form.purchaseinventoryList[index].minUnitCode = rowValue.minUnitCode;
form.purchaseinventoryList[index].unitCode = rowValue.unitCode;
form.purchaseinventoryList[index].manufacturer = rowValue.manufacturer;
form.purchaseinventoryList[index].partPercent = rowValue.partPercent;
form.purchaseinventoryList[index].price = (rowValue.purchaseAmount || 0).toFixed(2);
price.value = (rowValue.purchaseAmount || 0).toFixed(2);
form.purchaseinventoryList[index].unitList = rowValue.unitList[0];
// form.purchaseinventoryList[index].locationInventoryList = locationList.value;
unitMap.value['unitCode'] = rowValue.unitCode;
unitMap.value['minUnitCode'] = rowValue.minUnitCode;
unitMap.value['currentCode'] = rowValue.unitCode;
form.purchaseinventoryList[index].itemQuantity = 0;
form.purchaseinventoryList[index].totalPrice = 0;
}
let totalQuantity = 0;
// 选择仓库
function handleLocationClick(item, row, index) {
getCount({
itemId: row.itemId,
orgLocationId: item.id,
}).then((res) => {
if (res.data) {
totalQuantity = 0;
res.data.forEach((item) => {
totalQuantity += item.orgQuantity;
});
form.purchaseinventoryList[index].quantity =
handleTotalQuantity(
totalQuantity,
row.partPercent,
row.unitList.unitCode_dictText,
row.unitList.minUnitCode_dictText
) || 0;
// form.purchaseinventoryList[index].price = (res.data[0].price || 0).toFixed(2);
// price.value = (res.data[0].price || 0).toFixed(2);
// form.purchaseinventoryList[index].traceNo = res.data[0].traceNo || '';
form.purchaseinventoryList[index].itemTable = res.data[0].itemTable || '';
form.purchaseinventoryList[index].startTime = formatDateymd(res.data[0].productionDate) || '';
form.purchaseinventoryList[index].endTime = formatDateymd(res.data[0].expirationDate) || '';
startTimeOld.value = form.purchaseinventoryList[index].startTime
? form.purchaseinventoryList[index].startTime
: '';
endTimeOld.value = form.purchaseinventoryList[index].endTime
? form.purchaseinventoryList[index].endTime
: '';
}
});
// form.purchaseinventoryList[index].purposeLocationStoreId =
// item.locationStoreId;
// form.purchaseinventoryList[index].locationStoreName = item.locationStoreName;
//
}
// 处理总数量不整时显示的情况,例 10盒2片
function handleTotalQuantity(quantity, partPercent, unitCode, minUnitCode) {
if (quantity % partPercent != 0) {
return (
Math.floor(quantity / partPercent).toString() +
' ' +
unitCode +
(quantity % partPercent).toString() +
' ' +
minUnitCode
);
}
return quantity / partPercent;
}
function getNextDayZeroTimeStamp(selectedTime) {
const now = new Date(selectedTime);
const nextDay = new Date(now);
nextDay.setDate(now.getDate());
return nextDay.getTime();
}
function changeValStart(val, index) {
const selectedTime = val;
const validTime = this.getNextDayZeroTimeStamp(selectedTime);
if (form.purchaseinventoryList[index].endTime) {
const endTime = formatDateymd(form.purchaseinventoryList[index].endTime);
const getNextDayZeroTime = this.getNextDayZeroTimeStamp(endTime);
if (getNextDayZeroTime < validTime) {
proxy.$message.warning('生产日期必须小于等于有效期!');
form.purchaseinventoryList[index].startTime = startTimeOld.value;
return;
}
}
}
function changeValEnd(val, index) {
const selectedTimes = val;
const validTimes = this.getNextDayZeroTimeStamp(selectedTimes);
if (form.purchaseinventoryList[index].startTime) {
const startTime = formatDateymd(form.purchaseinventoryList[index].startTime);
const getNextDayZeroTimes = this.getNextDayZeroTimeStamp(startTime);
if (getNextDayZeroTimes > validTimes) {
proxy.$message.warning('有效期必须大于等于生产日期!');
form.purchaseinventoryList[index].endTime = endTimeOld.value;
return;
}
}
}
// 切换仓库类型获取药房/药库列表
function handleChangeLocationType(value) {
if (value == 16) {
getPharmacyList().then((res) => {
const list = res?.data || [];
if (!list.length) {
getPharmacyListAll().then((res2) => {
locationList.value = res2?.data || [];
});
} else {
locationList.value = list;
}
});
} else if (value == 17) {
getDispensaryList().then((res) => {
const list = res?.data || [];
if (!list.length) {
getDispensaryListAll().then((res2) => {
locationList.value = res2?.data || [];
});
} else {
locationList.value = list;
}
});
}
}
// 单位处理
function handleUnitCodeChange(row, index, value) {
if (
//小单位
unitMap.value['unitCode'] != value &&
unitMap.value['currentCode'] == unitMap.value['unitCode']
) {
console.log(1212121, row, index, value);
// 总库存数
form.purchaseinventoryList[index].quantity = totalQuantity;
// // 采购数量
// form.purchaseinventoryList[index].itemQuantity =
// form.purchaseinventoryList[index].itemQuantity * row.partPercent || 0;
// // 采购单价
// form.purchaseinventoryList[index].price = (price.value / row.partPercent).toFixed(4);
// 采购数量
form.purchaseinventoryList[index].itemQuantity = undefined;
// 采购单价
// form.purchaseinventoryList[index].price = undefined;
} else {
//大单位
console.log(12121212, row, index, value);
form.purchaseinventoryList[index].quantity =
handleTotalQuantity(
totalQuantity,
row.partPercent,
row.unitList.unitCode_dictText,
row.unitList.minUnitCode_dictText
) || 0;
// form.purchaseinventoryList[index].itemQuantity =
// form.purchaseinventoryList[index].itemQuantity / row.partPercent || 0;
// form.purchaseinventoryList[index].price = price.value;
form.purchaseinventoryList[index].itemQuantity = undefined;
// form.purchaseinventoryList[index].price = undefined;
}
form.purchaseinventoryList[index].totalPrice = undefined;
unitMap.value['currentCode'] = value;
}
// 计算总价
function handleTotalPrice(index) {
let purchaseItem = form.purchaseinventoryList[index];
if (!purchaseItem.unitList) {
purchaseItem.unitList = {
unitCode: purchaseItem.unitCode,
unitCode_dictText: purchaseItem.unitCode_dictText,
};
}
if (purchaseItem.price > 0 && purchaseItem.itemQuantity > 0) {
if (purchaseItem.unitCode == purchaseItem.unitList.unitCode) {
//大单位
form.purchaseinventoryList[index].totalPrice = (
purchaseItem.price * purchaseItem.itemQuantity
).toFixed(4);
} else {
// 小单位
form.purchaseinventoryList[index].totalPrice = (
(purchaseItem.price / purchaseItem.partPercent) *
purchaseItem.itemQuantity
).toFixed(4);
}
}
if (form.purchaseinventoryList[index].itemQuantity == 0) {
form.purchaseinventoryList[index].totalPrice = 0;
}
}
// 批量保存
function handleSave(row, index) {
rowList.value = [];
form.purchaseinventoryList.map((row, index) => {
if (row) {
handleBlur(row);
proxy.$refs['receiptHeaderRef'].validate((valid) => {
if (valid) {
proxy.$refs['formRef'].validate((valid) => {
if (valid) {
if (row.itemQuantity == 0) {
proxy.$message.warning('采购数量不能为0');
return;
}
rowList.value.push(JSON.parse(JSON.stringify(row)));
if (
rowList._rawValue &&
rowList._rawValue.length == form.purchaseinventoryList.length
) {
addPurchaseinventorys(rowList._rawValue);
}
}
});
}
});
}
});
}
function addPurchaseinventorys(rowList) {
addPurchaseinventory(JSON.parse(JSON.stringify(rowList))).then((res) => {
// 当前行没有id视为首次新增
// if (!row.id) {
// data.isAdding = false; // 允许新增下一行
// }
if (res.data) {
proxy.$message.success('保存成功!');
form.purchaseinventoryList.map((row, index) => {
console.log(row, 'res.data');
form.purchaseinventoryList[index].id = res.data[index];
form.purchaseinventoryList[index].isSave = true;
});
// forms.purchaseinventoryList[index] = JSON.parse(
// JSON.stringify(form.purchaseinventoryList[index])
// );
// currentEditRow.value = {};
// currentIndex.value = -1;
// saveRowObject.value = JSON.parse(JSON.stringify(row));
console.log(saveRowObject.value, '!@121211');
}
});
}
function handleTraceNoInput(value, row) {
row.traceNo = value.concat(',');
// row.traceNo = row.traceNo.startsWith(',') ? row.traceNo.substring(1) : row.traceNo;
}
// function handleSave(row, index) {
// handleBlur(row);
// proxy.$refs['receiptHeaderRef'].validate((valid) => {
// if (valid) {
// proxy.$refs['formRef'].validate((valid) => {
// if (valid) {
// if (row.itemQuantity == 0) {
// proxy.$message.warning('采购数量不能为0');
// return;
// }
// addPurchaseinventory(row).then((res) => {
// // 当前行没有id视为首次新增
// if (!row.id) {
// data.isAdding = false; // 允许新增下一行
// }
// if (res.data) {
// proxy.$message.success('保存成功!');
// form.purchaseinventoryList[index].id = res.data;
// form.purchaseinventoryList[index].isSave = true;
// // form.purchaseinventoryList[index].isEditing = false;
// forms.purchaseinventoryList[index] = JSON.parse(
// JSON.stringify(form.purchaseinventoryList[index])
// );
// currentEditRow.value = {};
// currentIndex.value = -1;
// saveRowObject.value = JSON.parse(JSON.stringify(row));
// // saveRowObject.value = JSON.parse(JSON.stringify(form.purchaseinventoryList[index]))
// console.log(saveRowObject.value, '!@121211');
// }
// });
// }
// });
// }
// });
// // 保存逻辑...
// }
/** 选择条数 */
function handleSelectionChange(selection) {
console.log(selection, 'selection');
// selectedData.value = selection.map((item) => ({ ...item })); // 存储选择的行数据
ids.value = selection.map((item) => item.id);
selectedRows.value = selection;
single.value = selection.length != 1;
multiple.value = !selection.length;
}
// 预览单据函数 - 简化实现,避免复杂嵌套数据结构
function handlePrintPreview() {
console.log('开始执行预览功能');
// 检查是否存在数据
if (!form.purchaseinventoryList || form.purchaseinventoryList.length === 0) {
ElMessage.warning('没有数据可预览');
return;
}
// 检查是否所有必填字段都已填写
const hasEmptyFields = form.purchaseinventoryList.some(row => {
return !row.name || !row.itemQuantity || !row.price || !row.totalPrice;
});
if (hasEmptyFields) {
ElMessage.warning('请确保所有药品信息完整后再预览');
return;
}
// 检查templateJson是否已正确导入
if (!templateJson) {
console.error('错误templateJson未定义请检查导入');
ElMessage.error('打印模板未加载,请刷新页面重试');
return;
}
// 安全获取供应商名称
let supplierName = '';
if (supplierListOptions.value && receiptHeaderForm.supplierId) {
const filteredSuppliers = supplierListOptions.value.filter((item) => {
return item.value == receiptHeaderForm.supplierId;
});
supplierName = filteredSuppliers.length > 0 ? filteredSuppliers[0].label : '';
}
// 计算总金额
const totalAmount = form.purchaseinventoryList.reduce((accumulator, currentRow) => {
return accumulator + (Number(currentRow.totalPrice) || 0);
}, 0);
// 重新构建包含药品清单的数据结构
const simpleData = {
supplierName: supplierName || '',
totalAmount: totalAmount.toFixed(2),
receiptNumber: receiptHeaderForm.receiptNumber || '',
receiptDate: receiptHeaderForm.receiptDate || '',
organizationName: receiptHeaderForm.organizationName || '',
// 重新添加药品清单数组,但确保格式安全
purchaseinventoryList: Array.isArray(form.purchaseinventoryList) ? form.purchaseinventoryList.map(item => ({
id: item.id || '',
name: item.name || '',
itemQuantity: item.itemQuantity || 0,
price: item.price || 0,
totalPrice: item.totalPrice || 0,
// 保留其他可能需要的字段
...item
})) : []
};
console.log('简化后的预览数据:', simpleData);
try {
// 直接使用templateJson创建打印
// 避免复杂的模板创建和数据处理逻辑
setTimeout(() => {
try {
// 最简单的方式使用hiprint - 直接调用print2方法
// 只传递必要的数据,不传递复杂嵌套的数组
const printOptions = {
preview: true,
title: '药品采购入库清单',
printer: ''
};
// 方法1: 尝试直接使用templateJson
console.log('尝试直接使用templateJson');
if (typeof hiprint.template !== 'undefined' && typeof hiprint.template.print === 'function') {
hiprint.template.print(templateJson, simpleData, printOptions);
}
// 方法2: 尝试创建简单模板
else if (typeof hiprint.PrintTemplate === 'function') {
console.log('尝试使用PrintTemplate');
const template = new hiprint.PrintTemplate({template: templateJson});
template.print(simpleData, printOptions);
}
// 方法3: 最直接的方式
else {
console.log('尝试最直接的打印方式');
hiprint.print(templateJson, simpleData, printOptions);
}
ElMessage.success('正在生成单据预览,请等待...');
} catch (e) {
console.error('预览执行失败:', e);
ElMessage.error('预览功能执行失败,请稍后重试');
}
}, 50);
} catch (error) {
console.error('预览准备失败:', error);
ElMessage.error('预览失败,请检查配置');
}
}
// 打印单据函数 - 简化实现,与预览函数保持一致
function handlePrint() {
// 检查是否存在数据
if (!form.purchaseinventoryList || form.purchaseinventoryList.length === 0) {
ElMessage.warning('没有数据可打印');
return;
}
// 检查是否所有必填字段都已填写
const hasEmptyFields = form.purchaseinventoryList.some(row => {
return !row.name || !row.itemQuantity || !row.price || !row.totalPrice;
});
if (hasEmptyFields) {
ElMessage.warning('请确保所有药品信息完整后再打印');
return;
}
// 安全获取供应商名称
let supplierName = '';
if (supplierListOptions.value && receiptHeaderForm.supplierId) {
const filteredSuppliers = supplierListOptions.value.filter((item) => {
return item.value == receiptHeaderForm.supplierId;
});
supplierName = filteredSuppliers.length > 0 ? filteredSuppliers[0].label : '';
}
// 计算总金额
const totalAmount = form.purchaseinventoryList.reduce((accumulator, currentRow) => {
return accumulator + (Number(currentRow.totalPrice) || 0);
}, 0);
// 重新构建包含药品清单的数据结构
const simpleData = {
supplierName: supplierName || '',
totalAmount: totalAmount.toFixed(2),
receiptNumber: receiptHeaderForm.receiptNumber || '',
receiptDate: receiptHeaderForm.receiptDate || '',
organizationName: receiptHeaderForm.organizationName || '',
// 重新添加药品清单数组,但确保格式安全
purchaseinventoryList: Array.isArray(form.purchaseinventoryList) ? form.purchaseinventoryList.map(item => ({
id: item.id || '',
name: item.name || '',
itemQuantity: item.itemQuantity || 0,
price: item.price || 0,
totalPrice: item.totalPrice || 0,
// 保留其他可能需要的字段
...item
})) : []
};
try {
// 使用与预览函数相同的简化打印逻辑
setTimeout(() => {
try {
const printOptions = {
preview: false, // 直接打印模式
title: '药品采购入库清单',
printer: ''
};
// 尝试多种可能的API调用方式
if (typeof hiprint.template !== 'undefined' && typeof hiprint.template.print === 'function') {
hiprint.template.print(templateJson, simpleData, printOptions);
}
else if (typeof hiprint.PrintTemplate === 'function') {
const template = new hiprint.PrintTemplate({template: templateJson});
template.print(simpleData, printOptions);
}
else {
hiprint.print(templateJson, simpleData, printOptions);
}
ElMessage.success('打印请求已发送');
} catch (e) {
console.error('打印执行失败:', e);
ElMessage.error('打印执行失败,请稍后重试');
}
}, 50);
} catch (error) {
console.error('打印失败:', error);
ElMessage.error('打印失败,请检查配置');
}
}
function deleteSelectedRows() {
let length = selectedRows.value.length;
let ids = [];
if (selectedRows.value[0].id) {
ids = selectedRows.value.map((item) => {
return item.id;
});
}
if (selectedRows.value[length - 1].isSave) {
delPurchaseinventory(ids).then((res) => {
if (res.code == 200) {
proxy.$message.success('删除成功');
}
});
} else {
if (length > 1) {
delPurchaseinventory(ids.slice(0, -1)).then((res) => {
if (res.code == 200) {
proxy.$message.success('删除成功');
}
});
}
}
form.purchaseinventoryList = form.purchaseinventoryList.filter(
(row) => !selectedRows.value.includes(row)
);
data.isAdding = false;
currentIndex.value = -1;
}
/**计算合计金额 */
function handleTotalAmount() {
totalAmount.value = form.purchaseinventoryList.reduce((accumulator, currentRow) => {
return accumulator + (Number(currentRow.totalPrice) || 0);
}, 0);
}
/** 重置操作表单 */
function reset() {
proxy.resetForm('receiptHeaderRef');
form.purchaseinventoryList = [];
// 完全重置所有表单字段
Object.assign(receiptHeaderForm, {
busNo: undefined,
practitionerId: undefined,
occurrenceTime: formatDate(new Date()),
supplierId: undefined,
medicationType: "1",
purposeTypeEnum: undefined
});
// 重置编辑数据
editData.value = {};
}
// 显示弹框
function show() {
data.isEdit = false;
data.isAdding = false;
reset();
visible.value = true;
getPurchaseinventoryTypeList();
getInitBusNo().then((res) => {
if (res.data && res.data.busNo) {
receiptHeaderForm.busNo = res.data.busNo;
}
});
// supplierListOptions.value = props.supplierListOptions;
// itemTypeOptions.value = props.itemTypeOptions;
// practitionerListOptions.value = props.practitionerListOptions;
// receiptHeaderForm.busNo = props.busNoAdd;
// console.log(purchase_type.value, "purchase_type.value")
// // 设置默认值为字典中的第一个值
// if (purchase_type.value.length > 0) {
// form.value.medicationType = purchase_type.value[0].value;
// }
}
// 显示弹框
function edit() {
data.isAdding = false;
data.isEdit = true;
// reset();
visible.value = true;
// supplierListOptions.value = props.supplierListOptions;
// itemTypeOptions.value = props.itemTypeOptions;
// practitionerListOptions.value = props.practitionerListOptions;
// receiptHeaderForm.busNo = props.busNoAdd;
// 确保数据存在
if (!editData.value.item || editData.value.item.length === 0) {
proxy.$message.warning('没有可编辑的数据');
return;
}
receiptHeaderForm.value = editData.value.item.length > 0 ? editData.value.item[0] : {};
receiptHeaderForm.busNo = editData.value.editRow.supplyBusNo;
// 修改这里优先从详情数据中获取供应商ID如果不存在则从列表数据中获取
receiptHeaderForm.supplierId = (editData.value.item[0] && editData.value.item[0].supplierId) || editData.value.editRow.supplierId;
receiptHeaderForm.practitionerId = editData.value.editRow.practitionerId;
console.log(editData.value.editRow, editData.value, 'editData.value.editRow');
receiptHeaderForm.occurrenceTime = editData.value.item[0].occurrenceTime
? formatDate(editData.value.item[0].occurrenceTime)
: formatDate(new Date());
console.log(editData.value.item[0].occurrenceTime);
console.log(
editData.value.editRow.purposeTypeEnum,
editData.value,
'editData.value.editRow.purposeTypeEnum'
);
//仓库类型
receiptHeaderForm.purposeTypeEnum = editData.value.editRow.purposeTypeEnum
? editData.value.editRow.purposeTypeEnum.toString()
: editData.value.item[0].purposeTypeEnum.toString();
receiptHeaderForm.medicationType =
editData.value.item[0].itemTable == 'med_medication_definition' ? '1' : '2';
total.value = form.purchaseinventoryList.length;
handleChangeLocationType(
editData.value.editRow.purposeTypeEnum
? editData.value.editRow.purposeTypeEnum.toString()
: editData.value.item[0].purposeTypeEnum.toString()
);
setTimeout(() => {
form.purchaseinventoryList = editData.value.item.map((item) => {
return {
...item,
name: item.itemName,
volume: item.totalVolume,
manufacturer: item.supplierName,
quantity: item.totalQuantity,
// 确保仓库字段回显
purposeLocationId: item.purposeLocationId || editData.value.editRow?.purposeLocationId || null,
locationStoreName: item.locationStoreName || '',
purposeLocationStoreId: item.purposeLocationStoreId || null,
// locationInventoryList: locationList.value,
startTime: formatDateymd(item.startTime),
endTime: formatDateymd(item.endTime),
applyTime: formatDate(item.applyTime),
isSave: true,
};
});
}, 100);
console.log(form.purchaseinventoryList, 'purchaseinventoryList.value');
console.log(receiptHeaderForm, 'receiptHeaderForm');
loading.value = false;
// 使用 Promise 确保数据加载完成
Promise.resolve().then(() => {
form.purchaseinventoryList = editData.value.item.map((item) => {
return {
...item,
name: item.itemName,
volume: item.totalVolume,
manufacturer: item.supplierName,
quantity: item.totalQuantity,
// 仓库字段回显Promise 阶段再保障一次)
purposeLocationId: item.purposeLocationId || editData.value.editRow?.purposeLocationId || null,
locationStoreName: item.locationStoreName || '',
purposeLocationStoreId: item.purposeLocationStoreId || null,
startTime: formatDateymd(item.startTime),
endTime: formatDateymd(item.endTime),
applyTime: formatDate(item.applyTime),
isSave: true,
};
});
});
}
function getPurchaseinventoryTypeList() {
getInit().then((response) => {
itemTypeOptions.value = response.data.itemTypeOptions; // 活动标记
practitionerListOptions.value = response.data.practitionerListOptions; // 预约必填标记
supplierListOptions.value = response.data.supplierListOptions; // 供应商列表
});
}
// reject
function handleReject() {
reject(route.query.supplyBusNo).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('操作成功');
tagsViewStore.delView(router.currentRoute.value);
store.clearCurrentData();
// 跳转到审核页面
router.replace({
path: '/aaaa/medicationmanagement/billapproval',
query: { type: 'purchaseDocument' },
});
}
});
}
function handelApply() {
pageLoading.value = true;
purchaseInventoryApproved(route.query.supplyBusNo)
.then((res) => {
if (res.code == 200) {
pageLoading.value = false;
proxy.$modal.msgSuccess('操作成功');
tagsViewStore.delView(router.currentRoute.value);
store.clearCurrentData();
// 跳转到审核页面
router.replace({
path: '/aaaa/medicationmanagement/billapproval',
query: { type: 'purchaseDocument' },
});
}
})
.catch(() => {
pageLoading.value = false;
});
}
function toLastView(visitedViews, view) {
const latestView = visitedViews.slice(-1)[0];
if (latestView) {
router.push(latestView.fullPath);
} else {
if (view.name === 'Dashboard') {
router.replace({ path: '/redirect' + view.fullPath });
} else {
router.push('/');
}
}
}
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
/** 提交审核 */
function submitAudit() {
let length = form.purchaseinventoryList.length;
if (length < 1) {
proxy.$modal.msgWarning('请先添加单据');
} else if (!form.purchaseinventoryList[length - 1].isSave) {
proxy.$modal.msgWarning('第' + length + '行单据未保存,请先保存');
} else {
submitApproval(receiptHeaderForm.busNo).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('提交审批成功');
emit('refresh');
visible.value = false;
// 关闭当前页
tagsViewStore.delView(router.currentRoute.value);
// 跳转到退货单管理页面
router.replace({ path: 'purchaseinventory' });
}
});
}
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
form.value = JSON.parse(JSON.stringify(row));
form.value.fwTypeCode = form.value.typeCode;
open.value = true;
title.value = '编辑';
}
/** 删除按钮操作 */
function handleDelete(row) {
const delId = row.id || ids.value;
data.isAdding = false;
proxy.$modal
.confirm('是否确认删除以上数据?')
.then(function () {
return delPurchaseinventory({ ids: delId.join(',') });
})
.then(() => {
proxy.$modal.msgSuccess('删除成功');
})
.catch(() => {});
}
function handleClickOutside() {
if (
currentIndex.value != -1 &&
!isEqual(currentEditRow.value, form.purchaseinventoryList[currentIndex.value])
) {
handleSave(form.purchaseinventoryList[currentIndex.value], currentIndex.value);
}
}
defineExpose({
show,
edit,
});
getPurchaseinventoryTypeList();
</script>
<style scoped>
.custom-tree-node {
display: flex;
align-items: center;
}
.title {
font-weight: bold;
font-size: large;
margin-bottom: 10px;
}
.error-border {
border: 1px solid red;
}
</style>