解决合并冲突
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user