From cf3fbf5a4cee0f205d957cd17fa4b3890fdeff53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Thu, 23 Jul 2026 13:31:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=9A=E5=91=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E3=80=81=E5=9C=A8=E7=BA=BF=E5=A4=8D=E8=AF=8A=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E9=85=8D=E9=80=81=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/businessApi.js | 4 + api/clinicAdmin.js | 5 + api/reception.js | 12 + pages.json | 16 +- .../sub_business_shared/common/display.js | 40 ++ .../sub_business_shared/common/orderParams.js | 12 + .../components/ListSkeleton.vue | 156 +++++++ .../sub_business_shared/order/index.vue | 381 ++++++++++------ .../sub_clinic_admin/common/display.js | 39 ++ .../sub_clinic_admin/common/orderParams.js | 11 + subPackages/sub_clinic_admin/order/index.vue | 415 +++++++++++------- .../modals/ChineseMedicineModal.vue | 8 +- .../sub_workbench/prescription_v2/index.vue | 306 +++++++++---- .../utils/prescriptionStorage.js | 1 - 14 files changed, 1030 insertions(+), 376 deletions(-) create mode 100644 subPackages/sub_business_shared/components/ListSkeleton.vue diff --git a/api/businessApi.js b/api/businessApi.js index 1367574..48892d7 100644 --- a/api/businessApi.js +++ b/api/businessApi.js @@ -88,6 +88,10 @@ export function createBusinessApi(prefix, headerFlag) { getOrderStatusOption() { return bizRequest({ url: `${prefix}-order/status-option`, method: 'GET' }); }, + /** 各状态订单数量(筛选不含 status,供 Tab 徽标) */ + getOrderStatusCount(params) { + return bizRequest({ url: `${prefix}-order/status-count`, method: 'GET', data: params }); + }, getOrderDetail(id) { return bizRequest({ url: `${prefix}-order/detail`, method: 'GET', data: { id } }); }, diff --git a/api/clinicAdmin.js b/api/clinicAdmin.js index 88dac30..aef3b9e 100644 --- a/api/clinicAdmin.js +++ b/api/clinicAdmin.js @@ -127,6 +127,11 @@ export function getOrderStatusOption() { return clinicRequest({ url: `${PREFIX}-order/status-option`, method: 'GET' }); } +/** 各状态订单数量(筛选不含 status,供 Tab 徽标) */ +export function getOrderStatusCount(params) { + return clinicRequest({ url: `${PREFIX}-order/status-count`, method: 'GET', data: params }); +} + export function getOrderDetail(id) { return clinicRequest({ url: `${PREFIX}-order/detail`, method: 'GET', data: { id } }); } diff --git a/api/reception.js b/api/reception.js index f999c6c..67f29c6 100644 --- a/api/reception.js +++ b/api/reception.js @@ -344,6 +344,18 @@ export function getCurrentStoreTypeApi(data) { }) } +/** + * 开方处方类型选项(含默认选中、可选 icon / icon_text) + * 后端按 clinic_type 判断 default;未传 icon 时前端不展示 + */ +export function getPrescriptionTypeOptionsApi(data) { + return req.request({ + url: '/newApi/doctor-reception-wx/prescription-type-options', + method: 'GET', + data: data || {} + }) +} + // 订单百分比调价配置(开方前) export function getPriceAdjustConfigApi(storeId) { return req.request({ diff --git a/pages.json b/pages.json index 72f3e25..c755f7f 100644 --- a/pages.json +++ b/pages.json @@ -172,7 +172,13 @@ "path": "prescription_v2/index", "style": { "navigationBarTitleText": "开方", - "navigationStyle": "custom" + "navigationStyle": "custom", + "usingComponents": { + "order-price-percent-adjust-popup": "/subPackages/sub_business_shared/components/OrderPricePercentAdjustPopup" + }, + "componentPlaceholder": { + "order-price-percent-adjust-popup": "view" + } } }, { @@ -437,7 +443,11 @@ }, { "path": "order/index", - "style": { "navigationBarTitleText": "商品订单", "navigationStyle": "custom" } + "style": { + "navigationBarTitleText": "商品订单", + "navigationStyle": "custom", + "disableScroll": true + } }, { "path": "order/detail", @@ -468,7 +478,7 @@ }, { "root": "subPackages/sub_business_shared", "pages": [ - { "path": "order/index", "style": { "navigationBarTitleText": "商品订单", "navigationStyle": "custom" } }, + { "path": "order/index", "style": { "navigationBarTitleText": "商品订单", "navigationStyle": "custom", "disableScroll": true } }, { "path": "order/detail", "style": { "navigationBarTitleText": "订单详情", "navigationStyle": "custom" } }, { "path": "order/trace/index", "style": { "navigationBarTitleText": "订单追溯", "navigationStyle": "custom" } }, { "path": "reconciliation/index", "style": { "navigationBarTitleText": "对账单", "navigationStyle": "custom" } }, diff --git a/subPackages/sub_business_shared/common/display.js b/subPackages/sub_business_shared/common/display.js index 3678ec2..7bde348 100644 --- a/subPackages/sub_business_shared/common/display.js +++ b/subPackages/sub_business_shared/common/display.js @@ -226,6 +226,46 @@ export function mapOrderListRow(item) { } } +/** + * 列表卡片瘦字段:只保留 UI 需要的标量,丢弃处方 content / 明细整包, + * 避免微信小程序 setData 体积过大(曾出现 ~1.5MB 告警) + * @param {Object} raw 接口订单行 + * @returns {Object} + */ +export function toOrderCardRow(raw) { + if (!raw) return { _wxKey: '0', id: 0 } + const d = mapOrderListRow(raw) + const id = raw.id + const status = raw.status + // 样式用:已完成/取消给语义 class,其余用状态码 + let statusKey = status != null ? String(status) : 'default' + if (status === 6 || status === 7) statusKey = 'done' + else if (status === 9) statusKey = 'cancel' + const payText = (d.totalPayPrice || '').replace('¥', '').trim() + return { + _wxKey: id != null && id !== '' ? String(id) : 'ord0', + id, + status, + statusKey, + orderNo: d.orderNo, + storeName: d.storeName, + statusText: d.statusText, + productSummary: d.productSummary || '药品订单', + prescriptionTypeText: d.prescriptionTypeText, + deliveryText: d.deliveryText, + patientName: d.patientName, + userNickname: d.userNickname, + receiverName: d.receiverName, + receiverMobile: d.receiverMobile, + createdAt: d.createdAt, + totalPayPrice: d.totalPayPrice, + payAmountText: payText, + pId: d.pId, + canViewPrescription: d.canViewPrescription, + upId: d.upId, + } +} + /** 物流详情(对齐 PC express-detail/detail-by-order) */ export function mapExpressDetail(data) { if (!data || typeof data !== 'object') { diff --git a/subPackages/sub_business_shared/common/orderParams.js b/subPackages/sub_business_shared/common/orderParams.js index 04daa6c..9906817 100644 --- a/subPackages/sub_business_shared/common/orderParams.js +++ b/subPackages/sub_business_shared/common/orderParams.js @@ -30,3 +30,15 @@ export function buildOrderSaleAmountParams(opts) { const { page, pageSize, ...rest } = opts || {} return buildOrderListParams(rest) } + +/** + * 状态数量接口参数:与列表筛选一致,但不传 status + * (徽标要展示每个状态的数量,不能被当前 Tab 的 status 过滤) + */ +export function buildOrderStatusCountParams(opts) { + const params = buildOrderSaleAmountParams(opts) + if (params && Object.prototype.hasOwnProperty.call(params, 'status')) { + delete params.status + } + return params +} diff --git a/subPackages/sub_business_shared/components/ListSkeleton.vue b/subPackages/sub_business_shared/components/ListSkeleton.vue new file mode 100644 index 0000000..68a7d6d --- /dev/null +++ b/subPackages/sub_business_shared/components/ListSkeleton.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/subPackages/sub_business_shared/order/index.vue b/subPackages/sub_business_shared/order/index.vue index 180028f..707ec12 100644 --- a/subPackages/sub_business_shared/order/index.vue +++ b/subPackages/sub_business_shared/order/index.vue @@ -1,12 +1,26 @@