解决合并冲突

This commit is contained in:
2025-12-10 14:20:24 +08:00
parent e1385cb3e6
commit 18f6a845e6
804 changed files with 61881 additions and 13577 deletions

View File

@@ -0,0 +1,89 @@
import request from '@/utils/request';
// 查询调价审核列表
export function getPriceAdjustmentPage (query) {
// 创建请求参数对象,确保使用后端期望的参数名
const requestParams = {
// 映射pageNum到pageNo因为后端API期望使用pageNo
pageNo: query.pageNum || query.current || query.page || 1,
// 映射pageSize到pageSize保持一致
pageSize: query.pageSize || query.size || query.limit || 10,
// 保留其他查询参数
...Object.entries(query).reduce((acc, [key, value]) => {
if (!['pageNum', 'current', 'page', 'pageSize', 'size', 'limit'].includes(key)) {
acc[key] = value;
}
return acc;
}, {})
};
return request ({
url: '/change/price/list/getPage',
method: 'get',
params: requestParams,
});
}
// 查询调价申请详情
export function getPriceAdjustmentDetail (query) {
return request({
url: '/change/price/list/searchSupplyRequestInfo',
method: 'post',
params: query
});
}
// 作废价格调整申请
export function cancelSupplyRequestData (query) {
return request({
url: '/change/price/list/cancelChangePriceData',
method: 'post',
params: query
});
}
// 查询挂号调价详情
export function searchSupplyRequestByHealth (query) {
return request({
url: '/change/price/list/searchChangePriceDataByHealth',
method: 'post',
params: query
});
}
// 查询诊疗调价详情
export function searchSupplyRequestByActivity (query) {
return request({
url: '/change/price/list/searchChangePriceDataByActivity',
method: 'post',
params: query || {}
});
}
// 查询耗材调价详情
export function searchSupplyRequestByDevice (query) {
return request({
url: '/change/price/list/searchChangePriceDataByDevice',
method: 'post',
params: query
});
}
// 查询药品调价详情
export function searchSupplyRequestByMed(query) {
return request({
url: '/change/price/list/searchChangePriceDataByMed',
method: 'post',
params: query || {}
});
}
// 提审价格调整申请
export function submitApprovalForPriceAdjustment (query) {
return request({
url: '/change/price/list/updateStatusByApproval',
method: 'post',
params: query
});
}

View File

@@ -0,0 +1,160 @@
<template>
<el-dialog
v-model="dialogVisible"
:title="'价格调整详情'"
width="90%"
:close-on-click-modal="false"
destroy-on-close
>
<div class="detail-container">
<div class="detail-content" v-if="itemList.length > 0">
<el-table :data="itemList" style="width: 100%" size="small" border>
<!-- 挂号调价单特殊显示 -->
<el-table-column label="科室" align="center" prop="orgName" v-if="categoryType.includes('挂号调价')"/>
<el-table-column
label="号源"
align="center"
prop="name"
v-if="categoryType.includes('挂号调价')"
/>
<el-table-column label="项目名称" align="center" prop="itemName" v-else />
<el-table-column label="当前进货价" align="center" prop="originBuyingPrice">
<template #default="scope">
<el-tag type="danger" size="small">
{{ scope.row.originBuyingPrice ? scope.row.originBuyingPrice + ' 元' : '-' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="调后进货价" align="center" prop="newBuyingPrice">
<template #default="scope">
<el-tag type="success" size="small">
{{ scope.row.newBuyingPrice ? scope.row.newBuyingPrice + ' 元' : '-' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="当前零售价" align="center" prop="originRetailPrice">
<template #default="scope">
<el-tag type="danger" size="small">
{{ scope.row.originRetailPrice ? scope.row.originRetailPrice + ' 元' : '-' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="调后零售价" align="center" prop="newRetailPrice">
<template #default="scope">
<el-tag type="success" size="small">
{{ scope.row.newRetailPrice ? scope.row.newRetailPrice + ' 元' : '-' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="进货价盈负差" align="center" prop="differenceBuyingPrice">
<template #default="scope">
{{ scope.row.differenceBuyingPrice ? scope.row.differenceBuyingPrice + ' 元' : '-' }}
</template>
</el-table-column>
<el-table-column label="影响库存数量" align="center" prop="itemQuantity">
<template #default="scope">
{{ scope.row.itemQuantity ? scope.row.itemQuantity + (scope.row.label || '') : '-' }}
</template>
</el-table-column>
<el-table-column label="调后零售价盈负差" align="center" prop="differenceRetailPrice">
<template #default="scope">
{{ scope.row.differenceRetailPrice ? scope.row.differenceRetailPrice + ' 元' : '-' }}
</template>
</el-table-column>
<el-table-column label="调价原因" align="center" prop="reason" />
</el-table>
<div class="creator-info">
<span class="creator-label">制单人{{ props.createName || '-' }}</span>
</div>
</div>
<div v-else class="empty-tip">暂无调价项目数据</div>
</div>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog">关闭</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup>
import { number } from 'echarts';
import { ref, computed, watch, toRaw, isProxy } from 'vue';
// 定义props
const props = defineProps({
visible: {
type: Boolean,
default: false,
},
detailData: {
type: [Array, Object],
default: () => [],
},
categoryType: {
type: String,
default: '',
},
createName: {
type: String,
default: '',
},
});
// 定义事件
const emit = defineEmits(['update:visible', 'close']);
// 响应式数据
const dialogVisible = ref(false);
// 计算属性:获取需要显示的数据列表
const itemList = computed(() => {
const data = props.detailData;
console.log('data', data);
return toRaw(data);
});
// 监听visible变化
watch(
() => props.visible,
(newVal) => {
dialogVisible.value = newVal;
}
);
// 监听dialogVisible变化
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal);
});
// 关闭对话框
const closeDialog = () => {
dialogVisible.value = false;
emit('close');
};
</script>
<style scoped>
.detail-container {
padding: 10px 0;
}
.creator-info {
text-align: left;
padding: 10px 0;
border-top: 1px solid #ebeef5;
margin-top: 10px;
}
.creator-label {
font-size: 14px;
color: #606266;
}
.empty-tip {
text-align: center;
padding: 40px 0;
color: #999;
}
</style>

View File

@@ -0,0 +1,315 @@
<template>
<div class="app-container">
<el-table
v-loading="loading"
:data="adjustmentList"
tooltip-effect="dark"
:show-overflow-tooltip="true"
style="width: 100%"
>
<el-table-column label="单据编号" align="center" prop="busNo" min-width="180" />
<el-table-column
label="调价类型"
align="center"
prop="categoryEnum_enumText"
min-width="120"
/>
<el-table-column label="审核状态" align="center" prop="statusEnum" min-width="100">
<template #default="scope">
<el-tag :type="getStatusTagType(scope.row.statusEnum)">
{{ scope.row.statusEnum_enumText || '-' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="制单人" align="center" prop="applicantId_dictText" min-width="120" />
<el-table-column label="制单时间" align="center" prop="createTime" min-width="180">
<template #default="scope">
{{ parseTime(scope.row.createTime) }}
</template>
</el-table-column>
<el-table-column label="审核人" align="center" prop="approverId_dictText" min-width="120" />
<el-table-column label="审核日期" align="center" prop="approvalTime" min-width="180">
<template #default="scope">
{{ scope.row.approvalTime ? parseTime(scope.row.approvalTime) : '-' }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="180">
<template #default="scope">
<el-button size="small" link @click="handleDetail(scope.row)">详情</el-button>
<template v-if="scope.row.statusEnum === 1">
<el-button
size="small"
link
type="success"
@click="handleSubmitApproval(scope.row)"
style="margin-left: 5px"
>提审</el-button
>
<el-button
size="small"
link
type="danger"
@click="handleCancelApproval(scope.row)"
style="margin-left: 5px"
>作废</el-button
>
</template>
<template v-else>
<el-button size="small" link disabled></el-button>
</template>
</template>
</el-table-column>
</el-table>
<Pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handlePagination"
/>
<!-- 详情弹窗组件 -->
<DetailDialog
v-model:visible="detailDialogVisible"
:detail-data="selectedRow"
:category-type="categoryType"
:create-name="createName"
@close="handleDetailClose"
/>
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import { parseTime } from '@/utils/openhis';
import Pagination from '@/components/Pagination';
import {
getPriceAdjustmentPage,
cancelSupplyRequestData,
searchSupplyRequestByHealth,
searchSupplyRequestByActivity,
searchSupplyRequestByDevice,
searchSupplyRequestByMed,
submitApprovalForPriceAdjustment,
} from './components/api';
import DetailDialog from './components/detailDialog.vue';
// 表格数据
const adjustmentList = ref([]);
const loading = ref(false);
const total = ref(0);
const activeName = ref('1'); // 当前激活的标签页
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
chargeItemContext: '', // 用于区分不同类型的调价
});
// 详情弹窗相关
const detailDialogVisible = ref(false);
const selectedRow = ref({});
const categoryType = ref('');
const createName = ref('');
// 状态标签类型
const getStatusTagType = (status) => {
const typeMap = {
1: 'warning', // 待审核
2: 'success', // 已审核
3: 'danger', // 已拒绝
};
return typeMap[status] || 'info';
};
// 处理分页事件
const handlePagination = (params) => {
// 将分页组件的参数映射到查询参数
queryParams.pageNum = params.page;
queryParams.pageSize = params.limit;
getList();
};
// 处理标签页切换
const handleClick = (tab) => {
// 更新激活标签页状态
activeName.value = tab.paneName;
// 设置当前查询类型
queryParams.chargeItemContext = tab.paneName;
// 重置页码
queryParams.pageNum = 1;
// 重新获取对应类型的数据
getList();
};
// 查询数据
const getList = async () => {
loading.value = true;
try {
// 确保设置当前查询类型参数
queryParams.chargeItemContext = activeName.value;
// 调用后端API获取对应类型的调价数据
const response = await getPriceAdjustmentPage(queryParams);
console.log('调价审核列表响应数据:', response);
// 处理返回的数据
if (response && response.code === 200) {
// 直接从records字段获取数据
adjustmentList.value = response.data?.records || [];
total.value = response.data?.total || 0;
} else {
ElMessage.error(response?.msg || '获取调价审核列表失败');
adjustmentList.value = [];
total.value = 0;
}
} catch (error) {
ElMessage.error('获取数据异常,请稍后重试');
console.error('获取调价审核列表异常:', error);
adjustmentList.value = [];
total.value = 0;
} finally {
loading.value = false;
}
};
// 操作按钮处理函数
const handleDetail = async (row) => {
// 保存当前行的调价类型
categoryType.value = row.typeEnum_enumText || '';
// 调用详情API获取数据
try {
// 显示加载状态
loading.value = true;
// 准备API参数
const params = {
busNo: row.busNo,
};
console.log('查询详情参数:', params);
console.log('查询详情参数:', row);
// 根据categoryEnum选择不同的API接口
let response;
if (row.itemCategoryEnum === 49) {
// 挂号
response = await searchSupplyRequestByHealth(params);
} else if (row.itemCategoryEnum === 48) {
// 诊疗
response = await searchSupplyRequestByActivity(params);
} else if (row.itemCategoryEnum === 47) {
// 耗材
response = await searchSupplyRequestByDevice(params);
} else if (row.itemCategoryEnum === 46) {
// 药品
response = await searchSupplyRequestByMed(params);
}
if (response && response.code === 200) {
// 日志记录原始返回数据
// 准备显示数据
createName.value = row.applicantId_dictText || '-';
// 设置selectedRow
selectedRow.value = response.data;
// 显示弹窗
detailDialogVisible.value = true;
} else {
ElMessage.error(response?.msg || '获取详情数据失败');
}
} catch (error) {
ElMessage.error('获取详情数据失败');
console.error('获取详情数据异常:', error);
} finally {
loading.value = false;
}
};
// 关闭详情弹窗处理
const handleDetailClose = () => {
// 重置选中的行数据和类型
selectedRow.value = {};
categoryType.value = '';
};
// 处理提审审核
const handleSubmitApproval = async (row) => {
try {
// 弹出确认对话框
await ElMessageBox.confirm('确定要提审该价格调整记录吗?', '确认提审', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'info',
});
// 调用后端提审接口
const response = await submitApprovalForPriceAdjustment({ busNo: row.busNo });
if (response && response.code === 200) {
ElMessage.success('提审成功');
// 重新加载列表数据
getList();
} else {
ElMessage.error(response?.msg || '提审失败');
}
} catch (error) {
// 用户取消操作不会触发错误提示
if (error !== 'cancel') {
ElMessage.error('提审失败');
console.error('提审价格调整记录异常:', error);
}
}
};
// 处理作废审核
const handleCancelApproval = async (row) => {
try {
// 弹出确认对话框
await ElMessageBox.confirm('确定要作废该价格调整记录吗?', '确认作废', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
});
// 调用后端作废接口
const response = await cancelSupplyRequestData({ busNo: row.busNo });
if (response && response.code === 200) {
ElMessage.success('作废成功');
// 重新加载列表数据
getList();
} else {
ElMessage.error(response?.msg || '作废失败');
}
} catch (error) {
// 用户取消操作不会触发错误提示
if (error !== 'cancel') {
ElMessage.error('作废失败');
console.error('作废价格调整记录异常:', error);
}
}
};
// 生命周期 - 加载
onMounted(() => {
// 设置初始查询类型为药品调价
queryParams.chargeItemContext = activeName.value;
getList();
});
</script>
<style scoped>
.app-container {
padding: 20px;
}
:deep(.el-tabs__content) {
height: auto;
}
:deep(.demo-tabs > .el-tabs__content) {
color: #6b778c;
font-size: 14px;
}
</style>