-
输入快照
-
{{ prettyJson(detail.input_snapshot) }}
+
+
+
+ 处方原图
+
+ {{ ocrImageUrls.length ? `${ocrImageUrls.length} 张` : '无图' }}
+
-
-
结果 JSON
-
{{ prettyJson(detail.result_json) }}
+
+
+
+
+
+ 本条记录未写入 image_urls(请确认识图时已成功上传)
+
+
+
+
+
+
+
+
+
+ {{
+ ocrResult.mode === 'transfer' ? '识图传方' : '识图开方'
+ }}
+
+
+
+ {{
+ ocrResult.patient_match.matched
+ ? `已匹配 #${ocrResult.patient_match.user_patient_id || ''}`
+ : '未匹配(将新建)'
+ }}
+
+
+
+ {{ ocrResult.patient_name || '—' }}
+
+
+ {{ ocrResult.patient_mobile || '—' }}
+
+
+ {{ sexText(ocrResult.sex) }} /
+ {{ ocrResult.age > 0 ? `${ocrResult.age} 岁` : '—' }}
+
+
+ {{ ocrResult.patient_address }}
+
+
+ {{ ocrResult.clinical_diagnose || '—' }}
+
+
+ {{ ocrResult.medical_advice || '—' }}
+
+
+ {{ ocrResult.dosage || '—' }} 剂 /
+ {{ ocrResult.day_dosage || '—' }} 次
+
+
+ 已对照 {{ ocrResult.matched.length }} /
+ 未对照 {{ ocrResult.unmatched.length }}
+
+
+
+
+
+ 已对照({{ ocrResult.matched.length }})
+
+
+
+
+ {{ m.ai_name || '—' }}
+
+ {{ m.dose || '' }}{{ m.unit || '' }}
+
+ →
+ {{ selectedCandidateName(m) }}
+
+
+
+
+
+
+ 未对照({{ ocrResult.unmatched.length }})
+
+
+
+ {{ u.ai_name || '—' }}
+
+ {{ u.dose || '' }}{{ u.unit || '' }}
+
+
+
+
+
+
+ 暂无药品对照结果
+
+
+
+
+ 当前场景暂无结构化预览,请切换到「JSON」查看原始内容
+
+
+
+
+
+
输入快照
+
{{
+ prettyJson(detail.input_snapshot)
+ }}
+
+
+
结果 JSON
+
{{
+ prettyJson(detail.result_json)
+ }}
+
+
+
+
@@ -406,6 +676,106 @@ function onArchiveClick() {
white-space: pre-wrap;
}
+.ocr-img-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ padding: 12px;
+}
+
+.ocr-thumb {
+ overflow: hidden;
+ object-fit: cover;
+ cursor: pointer;
+ border: 1px solid hsl(var(--border));
+ border-radius: 6px;
+ box-shadow: 0 0 6px hsl(var(--primary) / 18%);
+}
+
+.ocr-img-empty {
+ padding: 16px 12px;
+ font-size: 13px;
+ color: hsl(var(--muted-foreground));
+}
+
+.preview-body {
+ padding: 4px 0 8px;
+}
+
+.preview-desc :deep(.ant-descriptions-item-label) {
+ width: 96px;
+ white-space: nowrap;
+}
+
+.preview-section-title {
+ margin-bottom: 8px;
+ font-size: 13px;
+ font-weight: 600;
+ color: hsl(var(--foreground));
+}
+
+.preview-section-title.text-warn {
+ color: hsl(var(--destructive, var(--warning)));
+}
+
+.preview-drug-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 6px;
+}
+
+.preview-drug-chip {
+ display: inline-flex;
+ flex-wrap: nowrap;
+ gap: 4px;
+ align-items: center;
+ max-width: 100%;
+ padding: 3px 8px;
+ font-size: 12px;
+ line-height: 1.4;
+ background: hsl(var(--card, var(--background)));
+ border: 1px solid hsl(var(--border));
+ border-radius: 6px;
+}
+
+.preview-drug-chip.is-matched {
+ border-color: hsl(var(--primary) / 30%);
+ box-shadow: 0 0 4px hsl(var(--primary) / 14%);
+}
+
+.preview-drug-chip.is-unmatched {
+ border-color: hsl(0 84% 60% / 40%);
+ box-shadow: 0 0 4px hsl(0 84% 60% / 14%);
+}
+
+.chip-ai {
+ font-weight: 500;
+ color: hsl(var(--foreground));
+}
+
+.chip-dose {
+ color: hsl(var(--muted-foreground));
+ white-space: nowrap;
+}
+
+.chip-arrow {
+ color: hsl(var(--muted-foreground));
+}
+
+.chip-match {
+ color: hsl(var(--primary));
+ white-space: nowrap;
+}
+
+.text-muted {
+ font-size: 12px;
+ color: hsl(var(--muted-foreground));
+}
+
+.preview-brief {
+ max-height: 360px;
+}
+
.kb-hits-panel {
overflow: hidden;
background: hsl(var(--card, var(--background)));
diff --git a/apps/web-antd/src/views/system/ai/generation/config/constants.ts b/apps/web-antd/src/views/system/ai/generation/config/constants.ts
index 76a45f30..0b29b207 100644
--- a/apps/web-antd/src/views/system/ai/generation/config/constants.ts
+++ b/apps/web-antd/src/views/system/ai/generation/config/constants.ts
@@ -12,6 +12,8 @@ export const AI_GENERATION_SCENE_OPTIONS = [
{ label: '出方', value: 'prescription' },
{ label: '语音口述开方', value: 'voice_prescription' },
{ label: '每日简报', value: 'daily_brief' },
+ { label: '识图开方', value: 'prescription_image_ocr' },
+ { label: '识图传方', value: 'transfer_image_ocr' },
];
/** 是否命中业务缓存(简报按天缓存等) */
diff --git a/apps/web-antd/src/views/system/delivery-warehouse-bank-card/config/form.ts b/apps/web-antd/src/views/system/delivery-warehouse-bank-card/config/form.ts
index 7dd9bfec..c94b9126 100644
--- a/apps/web-antd/src/views/system/delivery-warehouse-bank-card/config/form.ts
+++ b/apps/web-antd/src/views/system/delivery-warehouse-bank-card/config/form.ts
@@ -59,15 +59,15 @@ export const reportFormProps: VbenFormProps = {
component: 'RadioGroup',
componentProps: {
options: [
- { label: '对公账户', value: '1' },
- { label: '法人账户', value: '2' },
+ // { label: '对公账户', value: '1' },
+ // { label: '法人账户', value: '2' },
{ label: '授权对公账户', value: '3' },
{ label: '授权个人账户', value: '4' },
],
},
fieldName: 'bank_account_type',
label: '账户类型',
- defaultValue: '2',
+ defaultValue: '4',
},
{
component: 'VbenInput',
diff --git a/apps/web-antd/src/views/system/store-bank-card/config/form.ts b/apps/web-antd/src/views/system/store-bank-card/config/form.ts
index 28e2a536..a38c8f58 100644
--- a/apps/web-antd/src/views/system/store-bank-card/config/form.ts
+++ b/apps/web-antd/src/views/system/store-bank-card/config/form.ts
@@ -103,7 +103,7 @@ export const bankCardReportFormProps: VbenFormProps = {
fieldName: 'account_type',
label: '账户类型',
rules: 'required',
- defaultValue: '2',
+ defaultValue: 4,
dependencies: {
show: (values) => !values.only_remark,
triggerFields: ['only_remark'],
diff --git a/apps/web-antd/src/views/system/store/api/index.ts b/apps/web-antd/src/views/system/store/api/index.ts
index 7595962a..feac5bdb 100644
--- a/apps/web-antd/src/views/system/store/api/index.ts
+++ b/apps/web-antd/src/views/system/store/api/index.ts
@@ -274,6 +274,15 @@ export async function updateStorePublicAccountLockDays(data: {
return requestClient.post
(`${prefix}update-public-account-lock-days`, data);
}
+/** 单独更新诊所订单分账类型与平台占比 */
+export async function updateStoreLedgerSplitApi(data: {
+ id: number;
+ ledger_split_type: number;
+ ledger_split_percent: number;
+}) {
+ return requestClient.post(`${prefix}update-ledger-split`, data);
+}
+
export async function toggleSalespersonSeePriceApi(data: { store_id: number }) {
return requestClient.post('salesperson-store-config/toggle-see-price', data);
}
@@ -302,3 +311,18 @@ export async function updateStoreBankInfoApi(data: {
}) {
return requestClient.post(`${prefix}update-store-bank-info`, data);
}
+
+/** 门店轮播图列表(平台端传 store_id) */
+export async function getStoreNavListApi(storeId: number) {
+ return requestClient.get(`${prefix}nav-list`, {
+ params: { store_id: storeId },
+ });
+}
+
+/** 全量同步门店轮播图 URL(含排序) */
+export async function saveStoreNavUrlApi(data: {
+ store_id: number;
+ url: string[];
+}) {
+ return requestClient.post(`${prefix}upload-nav`, data);
+}
diff --git a/apps/web-antd/src/views/system/store/components/cells/StoreConfigTogglesCell.vue b/apps/web-antd/src/views/system/store/components/cells/StoreConfigTogglesCell.vue
index a93f7140..86e5f50a 100644
--- a/apps/web-antd/src/views/system/store/components/cells/StoreConfigTogglesCell.vue
+++ b/apps/web-antd/src/views/system/store/components/cells/StoreConfigTogglesCell.vue
@@ -5,6 +5,8 @@
*/
import { Switch, Tag } from 'ant-design-vue';
+import { storeLedgerSplitTagText } from '../../config/constants';
+
defineProps<{
row: Record;
section: 'switches' | 'business' | 'all';
@@ -22,6 +24,8 @@ defineProps<{
onPublicAccountPay?: (id: number) => void;
/** 点击账期 Tag 打开配置弹窗 */
onPublicAccountLockDays?: (row: Record) => void;
+ /** 点击订单分账 Tag 打开分账设置弹窗 */
+ onLedgerSplit?: (row: Record) => void;
onBankCardReport: (row: Record) => void;
onClinicType?: (row: Record) => void;
onAllowInsurance?: (id: number) => void;
@@ -121,6 +125,18 @@ function publicAccountLockDaysText(row: Record): string {