diff --git a/api/clinicAdmin.js b/api/clinicAdmin.js index fffc254..347bf9a 100644 --- a/api/clinicAdmin.js +++ b/api/clinicAdmin.js @@ -67,6 +67,10 @@ export function getLedgerDetail(params) { return clinicRequest({ url: `${PREFIX}-settlement/ledger-detail`, method: 'GET', data: params }); } +export function getAccountChangeLogList(params) { + return clinicRequest({ url: `${PREFIX}-account-change-log/list`, method: 'GET', data: params }); +} + export function getWithdrawalList(params) { return clinicRequest({ url: `${PREFIX}-withdrawal/list`, method: 'GET', data: params }); } @@ -115,6 +119,18 @@ export function getOrderDetail(id) { return clinicRequest({ url: `${PREFIX}-order/detail`, method: 'GET', data: { id } }); } +export function getOrderTrace(params) { + return clinicRequest({ url: `${PREFIX}-order/trace`, method: 'GET', data: params }); +} + +export function getOrderLedgerDetail(params) { + return clinicRequest({ url: `${PREFIX}-order/ledger-detail`, method: 'GET', data: params }); +} + +export function getOrderReconciliationDetail(params) { + return clinicRequest({ url: `${PREFIX}-order/reconciliation-detail`, method: 'GET', data: params }); +} + export function refundOrder(data) { return clinicRequest({ url: `${PREFIX}-order/refund`, method: 'POST', data }); } diff --git a/pages.json b/pages.json index d039a5b..de4be4d 100644 --- a/pages.json +++ b/pages.json @@ -412,6 +412,10 @@ "path": "withdrawal/settlement/detail", "style": { "navigationBarTitleText": "结算明细", "navigationStyle": "custom" } }, + { + "path": "withdrawal/account-change/index", + "style": { "navigationBarTitleText": "资金变动", "navigationStyle": "custom" } + }, { "path": "withdrawal/apply", "style": { "navigationBarTitleText": "申请提现", "navigationStyle": "custom" } @@ -436,6 +440,10 @@ "path": "order/detail", "style": { "navigationBarTitleText": "订单详情", "navigationStyle": "custom" } }, + { + "path": "order/trace/index", + "style": { "navigationBarTitleText": "订单追溯", "navigationStyle": "custom" } + }, { "path": "warehouse/index", "style": { "navigationBarTitleText": "仓库管理", "navigationStyle": "custom" } diff --git a/subPackages/sub_clinic_admin/common/display.js b/subPackages/sub_clinic_admin/common/display.js index cc05166..9231f04 100644 --- a/subPackages/sub_clinic_admin/common/display.js +++ b/subPackages/sub_clinic_admin/common/display.js @@ -56,15 +56,22 @@ export function mapWithdrawalRow(item) { /** 结算记录列表行(yii_ledger_log) */ export function mapSettlementRow(item) { if (!item) return {} + const isIncrease = item.merged + ? (item.type_txt === '增加' || Number(item.amount) >= 0) + : item.type === 1 return { id: item.id, orderNo: item.order_no || (item.order_id ? '订单#' + item.order_id : '-'), + orderTypeText: item.order_type_txt || '', feeTypeText: item.fee_type_txt || '-', amountText: formatMoney(item.amount), - amountClass: ledgerTypeClass(item), + amountClass: isIncrease ? 'text-success' : 'text-danger', typeText: item.type_txt || '-', content: item.content || '', createdAt: formatDateTime(item.created_at), + merged: !!item.merged, + orderId: item.order_id, + orderType: item.order_type, _raw: item, } } @@ -445,6 +452,26 @@ export function mapReconciliationStoreRow(item) { } } +/** 订单追溯对账汇总(summary 字段,对齐 mapReconciliationStoreRow 结构) */ +export function mapReconciliationOrderSummary(summary) { + if (!summary) return null + return { + totalSales: formatMoney(summary.total_sales_price), + totalSupply: formatMoney(summary.total_supply_price), + registrationPrice: formatMoney(summary.registration_price), + registerOrderNo: summary.register_order_no || '', + herbal: mapReconciliationCategory(summary, 'herbal'), + medicine: mapReconciliationCategory(summary, 'medicine'), + servicePackage: mapReconciliationCategory(summary, 'service_package'), + otherFees: { + express: formatMoney(summary.express_price), + process: formatMoney(summary.process_price), + treatment: formatMoney(summary.treatment_price), + }, + _raw: summary, + } +} + export function mapReconciliationDrugRow(item) { if (!item) return {} return { diff --git a/subPackages/sub_clinic_admin/order/detail.vue b/subPackages/sub_clinic_admin/order/detail.vue index 00a5037..2c30453 100644 --- a/subPackages/sub_clinic_admin/order/detail.vue +++ b/subPackages/sub_clinic_admin/order/detail.vue @@ -122,11 +122,10 @@ :show="true" /> - - - + + + - @@ -276,6 +275,11 @@ export default { if (!pid) return this.$refs.prescriptionPopup.open(pid) }, + goTrace() { + uni.navigateTo({ + url: `/subPackages/sub_clinic_admin/order/trace/index?order_id=${this.id}&scene=product`, + }) + }, }, } @@ -547,6 +551,11 @@ $color-danger: #F53F3F; background: $theme-primary; color: #fff; } +.btn-outline { + background: #fff; + color: $theme-primary; + border: 1rpx solid $theme-primary; +} /* 次要操作(退款)给固定宽度 */ .btn-warn { diff --git a/subPackages/sub_clinic_admin/order/trace/index.vue b/subPackages/sub_clinic_admin/order/trace/index.vue new file mode 100644 index 0000000..5ab1d4e --- /dev/null +++ b/subPackages/sub_clinic_admin/order/trace/index.vue @@ -0,0 +1,482 @@ + + + + + diff --git a/subPackages/sub_clinic_admin/withdrawal/account-change/index.vue b/subPackages/sub_clinic_admin/withdrawal/account-change/index.vue new file mode 100644 index 0000000..b9d6f16 --- /dev/null +++ b/subPackages/sub_clinic_admin/withdrawal/account-change/index.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/subPackages/sub_clinic_admin/withdrawal/index.vue b/subPackages/sub_clinic_admin/withdrawal/index.vue index 20735c2..f1a3392 100644 --- a/subPackages/sub_clinic_admin/withdrawal/index.vue +++ b/subPackages/sub_clinic_admin/withdrawal/index.vue @@ -91,12 +91,13 @@ export default { }, balanceItems: [ { key: 'balance', label: '可提现余额 (元)', display: '0.00' }, - { key: 'frozen', label: '冻结金额 (元)', display: '0.00' } + { key: 'reviewing', label: '审核中金额 (元)', display: '0.00' }, + { key: 'pending', label: '待结算收益 (元)', display: '0.00' }, ], actions: [ { key: 'apply', label: '申请提现' }, - // { key: 'edit', label: '修改账户' }, - { key: 'settlement', label: '结算记录' } + { key: 'settlement', label: '结算记录' }, + { key: 'accountChange', label: '资金变动' }, ], withdrawalList: [], page: 1, @@ -129,6 +130,8 @@ export default { uni.navigateTo({ url: '/subPackages/sub_clinic_admin/withdrawal/card-edit' }); } else if (key === 'settlement') { uni.navigateTo({ url: '/subPackages/sub_clinic_admin/withdrawal/settlement/index' }); + } else if (key === 'accountChange') { + uni.navigateTo({ url: '/subPackages/sub_clinic_admin/withdrawal/account-change/index' }); } }, @@ -151,9 +154,16 @@ export default { loadBalance() { getClinicAdminBalance().then(w => { if (w.ok && w.data) { - // 格式化金额并去除 ¥ 符号以便大字号展示 - this.balanceItems[0].display = formatMoney(w.data.balance || 0).replace('¥', ''); - this.balanceItems[1].display = formatMoney(w.data.frozen_balance || 0).replace('¥', ''); + const fmt = (v) => formatMoney(v || 0).replace('¥', '') + const map = { + balance: fmt(w.data.balance), + reviewing: fmt(w.data.withdrawn_frozen), + pending: fmt(w.data.pending_earnings), + } + this.balanceItems = this.balanceItems.map(item => ({ + ...item, + display: map[item.key] ?? '0.00', + })) } }); }, @@ -265,7 +275,7 @@ $color-text-muted: #86909C; /* 统计网格 */ .stats-grid { display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: repeat(3, 1fr); gap: 20rpx; margin-bottom: 24rpx; } diff --git a/subPackages/sub_clinic_admin/withdrawal/settlement/detail.vue b/subPackages/sub_clinic_admin/withdrawal/settlement/detail.vue index 85069de..68ad899 100644 --- a/subPackages/sub_clinic_admin/withdrawal/settlement/detail.vue +++ b/subPackages/sub_clinic_admin/withdrawal/settlement/detail.vue @@ -47,6 +47,8 @@ export default { data() { return { ledgerLogId: 0, + orderId: 0, + orderType: 0, detail: { items: [], sum_money: '0' }, ledgerLogSummary: null, ledgerItems: [], @@ -55,19 +57,22 @@ export default { }, onLoad(q) { this.ledgerLogId = Number(q.ledger_log_id || 0) + this.orderId = Number(q.order_id || 0) + this.orderType = Number(q.order_type || 0) this.load() }, methods: { formatMoney, load() { this.loading = true - getLedgerDetail({ ledger_log_id: this.ledgerLogId }).then(w => { + const params = this.orderId > 0 && this.orderType > 0 + ? { order_id: this.orderId, order_type: this.orderType } + : { ledger_log_id: this.ledgerLogId } + getLedgerDetail(params).then(w => { if (w.ok) { this.detail = w.data || {} const log = this.detail.ledger_log - if (log) { - this.ledgerLogSummary = log - } + this.ledgerLogSummary = log || null this.ledgerItems = withWxKey(this.detail.items || [], 'id', 'led') } }).finally(() => { this.loading = false }) diff --git a/subPackages/sub_clinic_admin/withdrawal/settlement/index.vue b/subPackages/sub_clinic_admin/withdrawal/settlement/index.vue index 782941d..007263f 100644 --- a/subPackages/sub_clinic_admin/withdrawal/settlement/index.vue +++ b/subPackages/sub_clinic_admin/withdrawal/settlement/index.vue @@ -1,14 +1,27 @@