feat: 地区选择器改走接口、订单市价重算与资金流水、同步日志内容复用
region-address-picker 接 region-picker API;订单支持按进价重算 market_price、追踪页资金流水;MES/ERP/中台同步日志共用内容查看组件;地区管理支持 pid 下钻与拼音检索。
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user