Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
@@ -94,6 +94,7 @@
|
|||||||
style="width: 150px"
|
style="width: 150px"
|
||||||
:disabled="viewStatus == 'view' || viewStatus == 'apply'"
|
:disabled="viewStatus == 'view' || viewStatus == 'apply'"
|
||||||
v-if="viewStatus != 'apply' && viewStatus != 'view'"
|
v-if="viewStatus != 'apply' && viewStatus != 'view'"
|
||||||
|
@change="handleSupplierChange"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="supplier in supplierListOptions"
|
v-for="supplier in supplierListOptions"
|
||||||
@@ -117,12 +118,7 @@
|
|||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
style="width: 150px"
|
style="width: 150px"
|
||||||
:disabled="disabledForm"
|
@change="handleMedicationTypeChange"
|
||||||
@change="
|
|
||||||
(value) => {
|
|
||||||
itemType = value;
|
|
||||||
}
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="itemType in purchase_type"
|
v-for="itemType in purchase_type"
|
||||||
@@ -138,21 +134,38 @@
|
|||||||
placeholder=""
|
placeholder=""
|
||||||
clearable
|
clearable
|
||||||
style="width: 150px"
|
style="width: 150px"
|
||||||
:disabled="disabledForm"
|
@visible-change="handlePurposeTypeEnumVisibleChange"
|
||||||
@change="handleChangeLocationType"
|
@change="handleChangeLocationType"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in warehous_type"
|
v-for="dict in warehous_type"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:disabled="disabledForm"
|
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="仓库:" prop="headerLocationId">
|
||||||
|
<el-select
|
||||||
|
v-model="receiptHeaderForm.headerLocationId"
|
||||||
|
placeholder="请选择仓库"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
|
style="width: 200px"
|
||||||
|
@visible-change="handleHeaderLocationVisibleChange"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in locationList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-tabs type="border-card">
|
<el-tabs type="border-card">
|
||||||
<el-tab-pane label="入库单明细">
|
<el-tab-pane label="入库单明细">
|
||||||
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
<el-row :gutter="10" class="mb8" v-if="!viewStatus">
|
<el-row :gutter="10" class="mb8" v-if="!viewStatus">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" plain icon="Plus" @click="addNewRow"
|
<el-button type="primary" plain icon="Plus" @click="addNewRow"
|
||||||
@@ -170,6 +183,19 @@
|
|||||||
>
|
>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<div style="display: flex; gap: 10px;">
|
||||||
|
<el-input
|
||||||
|
v-model="detailSearchKey"
|
||||||
|
placeholder="请输入项目|厂家/产地|产品批号"
|
||||||
|
style="width: 280px;"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<template #prefix>
|
||||||
|
<el-icon><Search /></el-icon>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<el-form
|
<el-form
|
||||||
:model="form"
|
:model="form"
|
||||||
:rules="tableRules"
|
:rules="tableRules"
|
||||||
@@ -182,7 +208,7 @@
|
|||||||
<el-table
|
<el-table
|
||||||
row-key="rowKey"
|
row-key="rowKey"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:data="form.purchaseinventoryList"
|
:data="filteredPurchaseinventoryList"
|
||||||
@selection-change="handleSelectionChange"
|
@selection-change="handleSelectionChange"
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
@cell-mouse-leave="handleMouseLeave"
|
@cell-mouse-leave="handleMouseLeave"
|
||||||
@@ -257,50 +283,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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-if="viewStatus !== 'view'"
|
|
||||||
v-model="scope.row.purposeLocationId"
|
|
||||||
placeholder="请选择仓库"
|
|
||||||
:class="{ 'error-border': scope.row.error }"
|
|
||||||
clearable
|
|
||||||
>
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<!-- 非编辑状态下显示为只读输入框 -->
|
|
||||||
<el-input
|
|
||||||
v-else
|
|
||||||
:model-value="getLocationNameById(scope.row.purposeLocationId)"
|
|
||||||
readonly
|
|
||||||
disabled
|
|
||||||
:placeholder="'-'"
|
|
||||||
class="readonly-input" style="pointer-events: none;"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="采购数量"
|
label="采购数量"
|
||||||
align="center"
|
align="center"
|
||||||
@@ -579,31 +562,6 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</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
|
<el-table-column
|
||||||
label="总库存数量"
|
label="总库存数量"
|
||||||
align="center"
|
align="center"
|
||||||
@@ -708,8 +666,9 @@ import TraceNoDialog from "@/components/OpenHis/TraceNoDialog/index.vue";
|
|||||||
import {formatDate, formatDateymd} from "@/utils/index";
|
import {formatDate, formatDateymd} from "@/utils/index";
|
||||||
import {useStore} from "@/store/store";
|
import {useStore} from "@/store/store";
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
import {ElMessage} from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import {nextTick, onMounted, onUnmounted, ref, watch} from "vue";
|
import { Search } from "@element-plus/icons-vue";
|
||||||
|
import { nextTick, onMounted, onUnmounted, ref, watch, computed } from "vue";
|
||||||
import useTagsViewStore from "@/store/modules/tagsView";
|
import useTagsViewStore from "@/store/modules/tagsView";
|
||||||
import { isEqual } from "lodash";
|
import { isEqual } from "lodash";
|
||||||
import templateJson from "./components/templateJson.json";
|
import templateJson from "./components/templateJson.json";
|
||||||
@@ -776,6 +735,7 @@ const rowIndex = ref(-1);
|
|||||||
const totalAmount = ref(0);
|
const totalAmount = ref(0);
|
||||||
const editData = ref({});
|
const editData = ref({});
|
||||||
const pageLoading = ref(false);
|
const pageLoading = ref(false);
|
||||||
|
const detailSearchKey = ref('');
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
purchaseinventoryList: [],
|
purchaseinventoryList: [],
|
||||||
});
|
});
|
||||||
@@ -786,6 +746,7 @@ const receiptHeaderForm = reactive({
|
|||||||
busNo: undefined,
|
busNo: undefined,
|
||||||
occurrenceTime: formatDate(new Date()),
|
occurrenceTime: formatDate(new Date()),
|
||||||
practitionerId: userUserStore.practitionerId,
|
practitionerId: userUserStore.practitionerId,
|
||||||
|
headerLocationId: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
@@ -811,7 +772,7 @@ const data = reactive({
|
|||||||
itemId: [{ required: true, message: '项目不能为空', trigger: 'blur' }],
|
itemId: [{ required: true, message: '项目不能为空', trigger: 'blur' }],
|
||||||
statusEnum_enumText: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
|
statusEnum_enumText: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
|
||||||
unitCode: [{ required: true, message: '计量单位不能为空', trigger: 'blur' }],
|
unitCode: [{ required: true, message: '计量单位不能为空', trigger: 'blur' }],
|
||||||
purposeLocationId: [{ required: true, message: '目的仓库不能为空', trigger: 'blur' }],
|
// purposeLocationId 仓库已移至表头,此处不再校验
|
||||||
lotNumber: [{ required: true, message: '产品批号不能为空', trigger: 'change' }],
|
lotNumber: [{ required: true, message: '产品批号不能为空', trigger: 'change' }],
|
||||||
startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
|
startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
|
||||||
endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
|
endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
|
||||||
@@ -839,6 +800,19 @@ const currentRowId = ref("");
|
|||||||
const disabledForm = computed(() => {
|
const disabledForm = computed(() => {
|
||||||
return form.purchaseinventoryList.length > 0;
|
return form.purchaseinventoryList.length > 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const filteredPurchaseinventoryList = computed(() => {
|
||||||
|
if (!detailSearchKey.value) {
|
||||||
|
return form.purchaseinventoryList;
|
||||||
|
}
|
||||||
|
const searchKey = detailSearchKey.value.toLowerCase();
|
||||||
|
return form.purchaseinventoryList.filter(item => {
|
||||||
|
const nameMatch = item.name && item.name.toLowerCase().includes(searchKey);
|
||||||
|
const manufacturerMatch = item.manufacturerText && item.manufacturerText.toLowerCase().includes(searchKey);
|
||||||
|
const lotNumberMatch = item.lotNumber && item.lotNumber.toLowerCase().includes(searchKey);
|
||||||
|
return nameMatch || manufacturerMatch || lotNumberMatch;
|
||||||
|
});
|
||||||
|
});
|
||||||
const rowList = ref([]);
|
const rowList = ref([]);
|
||||||
const saveRowObject = ref({});
|
const saveRowObject = ref({});
|
||||||
|
|
||||||
@@ -937,7 +911,8 @@ function addNewRow() {
|
|||||||
if (!row.unitCode) {
|
if (!row.unitCode) {
|
||||||
errors.push('计量单位');
|
errors.push('计量单位');
|
||||||
}
|
}
|
||||||
if (!row.purposeLocationId) {
|
// 仓库校验改为检查表头
|
||||||
|
if (!receiptHeaderForm.headerLocationId) {
|
||||||
errors.push('仓库');
|
errors.push('仓库');
|
||||||
}
|
}
|
||||||
if (!row.itemQuantity || row.itemQuantity === '' || row.itemQuantity === 0) {
|
if (!row.itemQuantity || row.itemQuantity === '' || row.itemQuantity === 0) {
|
||||||
@@ -1057,6 +1032,7 @@ function handleBlur(row, index) {
|
|||||||
row.occurrenceTime = receiptHeaderForm.occurrenceTime;
|
row.occurrenceTime = receiptHeaderForm.occurrenceTime;
|
||||||
row.supplierId = receiptHeaderForm.supplierId;
|
row.supplierId = receiptHeaderForm.supplierId;
|
||||||
row.purposeTypeEnum = receiptHeaderForm.purposeTypeEnum;
|
row.purposeTypeEnum = receiptHeaderForm.purposeTypeEnum;
|
||||||
|
row.purposeLocationId = receiptHeaderForm.headerLocationId;
|
||||||
}
|
}
|
||||||
const handleMouseEnter = (row, column, cell, event) => {};
|
const handleMouseEnter = (row, column, cell, event) => {};
|
||||||
|
|
||||||
@@ -1231,8 +1207,109 @@ function changeValEnd(val, index) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 切换供应商前检查
|
||||||
|
function handleSupplierChange(value) {
|
||||||
|
if (form.purchaseinventoryList.length > 0 && value !== receiptHeaderForm.supplierId) {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'切换供应商将清空当前表格数据,是否继续?',
|
||||||
|
'系统提示',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
confirmButtonClass: 'el-button--primary',
|
||||||
|
cancelButtonClass: 'el-button',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
).then(() => {
|
||||||
|
receiptHeaderForm.supplierId = value;
|
||||||
|
form.purchaseinventoryList = [];
|
||||||
|
}).catch(() => {
|
||||||
|
// 取消操作,什么都不做
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
receiptHeaderForm.supplierId = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 切换药品类型前检查
|
||||||
|
function handleMedicationTypeChange(value) {
|
||||||
|
if (form.purchaseinventoryList.length > 0 && value !== receiptHeaderForm.medicationType) {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'切换药品类型将清空当前表格数据,是否继续?',
|
||||||
|
'系统提示',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
confirmButtonClass: 'el-button--primary',
|
||||||
|
cancelButtonClass: 'el-button',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
).then(() => {
|
||||||
|
receiptHeaderForm.medicationType = value;
|
||||||
|
itemType.value = value;
|
||||||
|
form.purchaseinventoryList = [];
|
||||||
|
}).catch(() => {
|
||||||
|
// 取消操作,什么都不做
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
receiptHeaderForm.medicationType = value;
|
||||||
|
itemType.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点击仓库类型下拉框展开时检查
|
||||||
|
function handlePurposeTypeEnumVisibleChange(visible) {
|
||||||
|
if (visible && form.purchaseinventoryList.length > 0) {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'切换仓库类型将清空当前表格数据,是否继续?',
|
||||||
|
'系统提示',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
confirmButtonClass: 'el-button--primary',
|
||||||
|
cancelButtonClass: 'el-button',
|
||||||
|
type: 'warning',
|
||||||
|
closeOnClickModal: false,
|
||||||
|
}
|
||||||
|
).then(() => {
|
||||||
|
receiptHeaderForm.purposeTypeEnum = null;
|
||||||
|
receiptHeaderForm.headerLocationId = null;
|
||||||
|
form.purchaseinventoryList = [];
|
||||||
|
}).catch(() => {
|
||||||
|
receiptHeaderForm.purposeTypeEnum = receiptHeaderForm.purposeTypeEnum;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点击仓库下拉框展开时检查
|
||||||
|
function handleHeaderLocationVisibleChange(visible) {
|
||||||
|
if (visible && form.purchaseinventoryList.length > 0) {
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'切换仓库将清空当前表格数据,是否继续?',
|
||||||
|
'系统提示',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
confirmButtonClass: 'el-button--primary',
|
||||||
|
cancelButtonClass: 'el-button',
|
||||||
|
type: 'warning',
|
||||||
|
closeOnClickModal: false,
|
||||||
|
}
|
||||||
|
).then(() => {
|
||||||
|
receiptHeaderForm.headerLocationId = null;
|
||||||
|
form.purchaseinventoryList = [];
|
||||||
|
}).catch(() => {
|
||||||
|
receiptHeaderForm.headerLocationId = receiptHeaderForm.headerLocationId;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 切换仓库类型获取药房/药库/耗材库列表
|
// 切换仓库类型获取药房/药库/耗材库列表
|
||||||
function handleChangeLocationType(value) {
|
function handleChangeLocationType(value) {
|
||||||
|
// 切换仓库类型时清空已选仓库
|
||||||
|
receiptHeaderForm.headerLocationId = null;
|
||||||
|
|
||||||
// 确保locationList变量已初始化
|
// 确保locationList变量已初始化
|
||||||
if (!locationList) {
|
if (!locationList) {
|
||||||
console.warn("locationList未初始化");
|
console.warn("locationList未初始化");
|
||||||
@@ -1373,7 +1450,7 @@ function handleSave(row, index) {
|
|||||||
rowList.value.push(JSON.parse(JSON.stringify(row)));
|
rowList.value.push(JSON.parse(JSON.stringify(row)));
|
||||||
if (
|
if (
|
||||||
rowList._rawValue &&
|
rowList._rawValue &&
|
||||||
rowList._rawValue.length == form.purchaseinventoryList.length
|
rowList._rawValue.length === form.purchaseinventoryList.length
|
||||||
) {
|
) {
|
||||||
addPurchaseinventorys(rowList._rawValue);
|
addPurchaseinventorys(rowList._rawValue);
|
||||||
}
|
}
|
||||||
@@ -1739,7 +1816,10 @@ function reset() {
|
|||||||
supplierId: undefined,
|
supplierId: undefined,
|
||||||
medicationType: "1",
|
medicationType: "1",
|
||||||
purposeTypeEnum: undefined,
|
purposeTypeEnum: undefined,
|
||||||
|
headerLocationId: null,
|
||||||
});
|
});
|
||||||
|
// 重置搜索关键字
|
||||||
|
detailSearchKey.value = '';
|
||||||
// 重置编辑数据
|
// 重置编辑数据
|
||||||
editData.value = {};
|
editData.value = {};
|
||||||
}
|
}
|
||||||
@@ -1775,6 +1855,7 @@ function edit() {
|
|||||||
: editData.value.item[0].purposeTypeEnum.toString();
|
: editData.value.item[0].purposeTypeEnum.toString();
|
||||||
receiptHeaderForm.medicationType =
|
receiptHeaderForm.medicationType =
|
||||||
editData.value.item[0].itemTable == "med_medication_definition" ? "1" : "2";
|
editData.value.item[0].itemTable == "med_medication_definition" ? "1" : "2";
|
||||||
|
receiptHeaderForm.headerLocationId = editData.value.editRow?.purposeLocationId || null;
|
||||||
total.value = form.purchaseinventoryList.length;
|
total.value = form.purchaseinventoryList.length;
|
||||||
handleChangeLocationType(
|
handleChangeLocationType(
|
||||||
editData.value.editRow.purposeTypeEnum
|
editData.value.editRow.purposeTypeEnum
|
||||||
|
|||||||
Reference in New Issue
Block a user