feat: 地区选择器改走接口、订单市价重算与资金流水、同步日志内容复用

region-address-picker 接 region-picker API;订单支持按进价重算 market_price、追踪页资金流水;MES/ERP/中台同步日志共用内容查看组件;地区管理支持 pid 下钻与拼音检索。
This commit is contained in:
李琦
2026-10-15 10:01:20 +08:00
parent 8df1ffb80a
commit 50fc55925f
87 changed files with 6653 additions and 576 deletions

View File

@@ -4,6 +4,8 @@ import { message, notification } from 'ant-design-vue';
import { debounce } from 'lodash-es';
import { defineStore } from 'pinia';
import { useUserStore as useVbenUserStore } from '@vben/stores';
import { useChatStore } from '#/views/business/chat/stores/chat';
import { useUserStore } from '#/views/business/chat/stores/user';
import { sendMessage } from '#/views/business/chat/utils/request';
@@ -160,12 +162,15 @@ export const usePrescriptionStore = defineStore('prescription', () => {
return totalProductCost.value + processingFee.value;
});
/** 实际履约/开方门店:自定义挂号店时用 selectedStoreId,否则用医生当前店 */
const resolvePrescribingStoreId = () => {
if (sendMode.value === 1 && selectedStoreId.value) {
return selectedStoreId.value;
return Number(selectedStoreId.value);
}
return myStoreId.value;
return Number(myStoreId.value || 0);
};
/** 供模板绑定:煎药预设等按此门店隔离加载 */
const prescribingStoreId = computed(() => resolvePrescribingStoreId());
const fetchStoreSeeRate = async () => {
try {
@@ -407,13 +412,33 @@ export const usePrescriptionStore = defineStore('prescription', () => {
}
};
/**
* 拉取医生门店列表并解析当前履约门店。
* 为什么:旧逻辑每次把 myStoreId 强制写成 res[0],换店/登录态门店会被冲掉,
* 煎药预设按 doctor+store 隔离时就会表现为「以前加的方案不见了」。
*/
const getMyStoreList = async () => {
try {
const res = await getMyStoreListApi();
myStoreList.value = res;
if (res.length > 0) {
myStoreId.value = res[0].id;
myStoreList.value = res || [];
if (!myStoreList.value.length) {
console.log('获取诊所列表成功(空)');
return;
}
// 优先:当前已选 → 后台登录态门店 → 本地缓存;最后才回落列表第一项
const vbenStoreId = Number(
useVbenUserStore().userInfo?.store_id || 0,
);
const preferred =
Number(myStoreId.value || 0) ||
vbenStoreId ||
Number(localStorage.getItem('myStoreId') || 0);
const hit = myStoreList.value.find(
(s: any) => Number(s.id) === preferred,
);
myStoreId.value = hit
? Number(hit.id)
: Number(myStoreList.value[0].id);
console.log('获取诊所列表成功');
} catch (error) {
console.error('获取诊所列表失败:', error);
@@ -1015,6 +1040,11 @@ export const usePrescriptionStore = defineStore('prescription', () => {
const oldRuleType = ruleType.value;
const oldProcessRuleId = processRuleId.value;
const oldChildProcessRuleId = childProcessRuleId.value;
// 预设整包回填时同一次已带下级 ID,勿误清空(对齐接诊页 / 小程序)
const keepChild =
payload.childProcessRuleId != null && Number(payload.childProcessRuleId) > 0;
const keepNote =
payload.processRuleNoteId != null && Number(payload.processRuleNoteId) > 0;
if (payload.ruleType === 2 && payload.ruleType !== oldRuleType) {
if (processRuleList.value.length === 0) {
@@ -1030,13 +1060,17 @@ export const usePrescriptionStore = defineStore('prescription', () => {
processRuleNoteList.value = [];
}
if (payload.processRuleId != null && payload.processRuleId !== oldProcessRuleId) {
childProcessRuleId.value = undefined;
processRuleNoteId.value = undefined;
if (!keepChild) {
childProcessRuleId.value = undefined;
processRuleNoteId.value = undefined;
}
childProcessRuleList.value = [];
processRuleNoteList.value = [];
}
if (payload.childProcessRuleId != null && payload.childProcessRuleId !== oldChildProcessRuleId) {
processRuleNoteId.value = undefined;
if (!keepNote) {
processRuleNoteId.value = undefined;
}
processRuleNoteList.value = [];
}
@@ -1446,6 +1480,8 @@ export const usePrescriptionStore = defineStore('prescription', () => {
registerStoreInfo,
selectedStoreId,
sendMode,
resolvePrescribingStoreId,
prescribingStoreId,
fetchRegisterStoreInfo,
toggleStoreSelection,
currentStoreName,

View File

@@ -138,13 +138,23 @@ export const usePrescriptionStore = () => {
await Promise.all([getMyStoreList(), getDrugUseListData(), getProcessRuleListData(), getPatientInfo()])
}
/**
* 拉取门店并保留已选/本地缓存门店,避免每次重置为列表第一项导致预设按店查空
*/
const getMyStoreList = async () => {
try {
const res = await getMyStoreListApi()
myStoreList.value = res
if (res.length > 0) {
myStoreId.value = res[0].id
}
myStoreList.value = res || []
if (!myStoreList.value.length) return
const preferred =
Number(myStoreId.value || 0) ||
Number(localStorage.getItem("myStoreId") || 0)
const hit = myStoreList.value.find(
(s: any) => Number(s.id) === preferred,
)
myStoreId.value = hit
? Number(hit.id)
: Number(myStoreList.value[0].id)
} catch (error) {
console.error("获取诊所列表失败:", error)
}