diff --git a/App.vue b/App.vue
index af455c4..ca2ce57 100644
--- a/App.vue
+++ b/App.vue
@@ -15,6 +15,7 @@
silentLogin().then((loginResult) => {
if (loginResult.success) {
+ this.tryHandlePendingSceneActions()
} else {
console.error('静默登录失败:', loginResult.message);
}
@@ -158,22 +159,28 @@
if (e === undefined)
return {};
- const scene = decodeURIComponent(e.query.scene)
+ const rawScene = e.query && e.query.scene
+ ? decodeURIComponent(e.query.scene)
+ : ''
// 这里接收扫码参数
- if (scene) {
+ if (rawScene) {
+ // 就诊人认领:cup={user_patient_id}
+ this.parseClaimPatientScene(rawScene)
+ // 医生代支付:ppay={order_id}
+ this.parseProxyPayScene(rawScene)
+
// 判断scene中是否包含sal_id
- let isSalespersonId = decodeURIComponent(e.query.scene).includes('sal_id');
- const scene = decodeURIComponent(e.query.scene).split('STORE_QR_CODE_')
+ let isSalespersonId = rawScene.includes('sal_id');
+ const scene = rawScene.split('STORE_QR_CODE_')
if (scene[1]) {
uni.setStorageSync('stores_id', scene[1])
uni.setStorageSync('store_id', scene[1])
}
- // uni.setStorageSync('stores_id', scene[1])
- const st_id = decodeURIComponent(e.query.scene).split('&')
- let store_id = decodeURIComponent(e.query.scene).split('STORE_QR_CODE_')
- store_id = decodeURIComponent(store_id[1]).split('&')
- const doctors_id = decodeURIComponent(e.query.scene).split('=')
- if (store_id[0] !== 'undefined') {
+ const st_id = rawScene.split('&')
+ let store_id = rawScene.split('STORE_QR_CODE_')
+ store_id = decodeURIComponent(store_id[1] || '').split('&')
+ const doctors_id = rawScene.split('=')
+ if (store_id[0] && store_id[0] !== 'undefined') {
uni.setStorageSync('stores_id', store_id[0])
uni.setStorageSync('store_id', store_id[0])
}
@@ -192,25 +199,9 @@
console.log('userId', userId, st_id[0].split('su_id=')[1], res);
})
}
- // 5.3 处理门店切换/设置
- // const storeId = uni.getStorageSync('store_id');
- // if (storeId) {
- // storeChange({
- // method: "post",
- // data: {
- // store_id: storeId
- // }
- // }).catch((err) => {
- // console.error('切换门店失败:', err);
- // });
- // } else {
- // uni.setStorageSync('store_id', res.data.data.data.store_id);
- // }
- // console.log(st_id, '4444111111111');
- // console.log(scene, '4444');
}
- // const scene = decodeURIComponent(e.query.scene).split('STORE_QR_CODE_')
- // console.log(scene, '11111');
+ // 登录后触发认领弹窗 / 代付跳转
+ this.tryHandlePendingSceneActions()
},
onHide: function() {
// console.log('App Hide')
@@ -221,6 +212,51 @@
// uni.removeStorageSync('token')
},
methods: {
+ /**
+ * 解析就诊人认领 scene:cup=123 或 up_id=123
+ */
+ parseClaimPatientScene(rawScene) {
+ const cupMatch = String(rawScene).match(/(?:^|&)cup=(\d+)/)
+ const upMatch = String(rawScene).match(/(?:^|&)up_id=(\d+)/)
+ const id = Number((cupMatch && cupMatch[1]) || (upMatch && upMatch[1]) || 0)
+ if (id > 0) {
+ uni.setStorageSync('claim_user_patient_id', id)
+ }
+ },
+ /**
+ * 解析医生代支付 scene:ppay=订单ID
+ * 新扫码时重置「已确认」标记,以便重新弹出确认框
+ */
+ parseProxyPayScene(rawScene) {
+ const match = String(rawScene).match(/(?:^|&)ppay=(\d+)/)
+ const orderId = Number((match && match[1]) || 0)
+ if (orderId > 0) {
+ uni.setStorageSync('proxy_pay_order_id', orderId)
+ uni.removeStorageSync('proxy_pay_confirmed')
+ }
+ },
+ /**
+ * 登录后:弹出认领模态 / 代付确认模态(不再直接跳转代付页)
+ */
+ tryHandlePendingSceneActions() {
+ const token = uni.getStorageSync('token')
+ if (!token) return
+ const claimId = Number(uni.getStorageSync('claim_user_patient_id') || 0)
+ if (claimId > 0) {
+ // 通知首页等挂载了认领弹窗的页面打开
+ setTimeout(() => {
+ uni.$emit('open-claim-patient-modal')
+ }, 400)
+ }
+ const proxyOrderId = Number(uni.getStorageSync('proxy_pay_order_id') || 0)
+ const proxyConfirmed = Number(uni.getStorageSync('proxy_pay_confirmed') || 0) === 1
+ // 有代付扫码且尚未确认:弹确认框;已确认过则不自动跳(避免反复打断)
+ if (proxyOrderId > 0 && !proxyConfirmed) {
+ setTimeout(() => {
+ uni.$emit('open-proxy-pay-confirm-modal')
+ }, 500)
+ }
+ },
initWebSocket() {
webSocketManager.connect();
diff --git a/components/claim-patient-modal/claim-patient-modal.vue b/components/claim-patient-modal/claim-patient-modal.vue
new file mode 100644
index 0000000..467aa83
--- /dev/null
+++ b/components/claim-patient-modal/claim-patient-modal.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
diff --git a/components/proxy-pay-confirm-modal/proxy-pay-confirm-modal.vue b/components/proxy-pay-confirm-modal/proxy-pay-confirm-modal.vue
new file mode 100644
index 0000000..16ba49a
--- /dev/null
+++ b/components/proxy-pay-confirm-modal/proxy-pay-confirm-modal.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
diff --git a/pages.json b/pages.json
index f4627d4..c2c409e 100644
--- a/pages.json
+++ b/pages.json
@@ -7,6 +7,8 @@
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",
// 消息通知组件
"^MessageNotification": "@/components/MessageNotification/MessageNotification.vue",
+ "^ClaimPatientModal$": "@/components/claim-patient-modal/claim-patient-modal.vue",
+ "^ProxyPayConfirmModal$": "@/components/proxy-pay-confirm-modal/proxy-pay-confirm-modal.vue",
"^FollowUpDrugDrawer$": "@/subPackages/doctor/components/FollowUpDrugDrawer.vue",
// 列表骨架屏(分包组件,主包页需配合 componentPlaceholder)
"^ListSkeleton$": "@/subPackages/common/components/ListSkeleton.vue",
diff --git a/pages/home/home.vue b/pages/home/home.vue
index 5ce3641..df655a4 100644
--- a/pages/home/home.vue
+++ b/pages/home/home.vue
@@ -2,6 +2,8 @@
+
+
@@ -330,6 +332,8 @@ import { getSpecialPrescriptionHomeApi } from '@/request/api/specialPrescription
import { fetchUnpaidRegisterListApi } from '@/request/api/register';
import request from "@/request/api/request";
import MessageNotification from "@/components/MessageNotification/MessageNotification.vue";
+import ClaimPatientModal from "@/components/claim-patient-modal/claim-patient-modal.vue";
+import ProxyPayConfirmModal from "@/components/proxy-pay-confirm-modal/proxy-pay-confirm-modal.vue";
import ImageCompressPopup from '@/components/image-compress-popup/image-compress-popup.vue';
import { registerImageCompressPopup } from '@/utils/image-compress-modal.js';
import { setGuestMode, isGuestMode, isLoggedIn } from '@/common/utils/auth.js';
@@ -338,6 +342,8 @@ import {silentLogin} from "@/utils/login";
export default {
components: {
MessageNotification,
+ ClaimPatientModal,
+ ProxyPayConfirmModal,
ImageCompressPopup,
},
data() {
@@ -931,7 +937,21 @@ export default {
} catch (error) {
console.error('获取默认医生ID失败:', error);
}
- }
+ },
+ /** 打开扫码认领就诊人弹窗 */
+ openClaimPatientModal() {
+ const modal = this.$refs.claimPatientModal;
+ if (modal && modal.openFromStorage) {
+ modal.openFromStorage();
+ }
+ },
+ /** 打开医生代付确认弹窗 */
+ openProxyPayConfirmModal() {
+ const modal = this.$refs.proxyPayConfirmModal;
+ if (modal && modal.openFromStorage) {
+ modal.openFromStorage();
+ }
+ },
},
onShow() {
this.storeId = uni.getStorageSync('store_id');
@@ -945,6 +965,16 @@ export default {
this.getDefaultDoctorId();
this.fetchUnpaidCounts();
this.fetchSpecialPrescriptionHome();
+ this.openClaimPatientModal();
+ this.openProxyPayConfirmModal();
+ },
+ mounted() {
+ uni.$on('open-claim-patient-modal', this.openClaimPatientModal);
+ uni.$on('open-proxy-pay-confirm-modal', this.openProxyPayConfirmModal);
+ },
+ onUnload() {
+ uni.$off('open-claim-patient-modal', this.openClaimPatientModal);
+ uni.$off('open-proxy-pay-confirm-modal', this.openProxyPayConfirmModal);
},
}
diff --git a/pages/home/index.vue b/pages/home/index.vue
index a02d802..1e94020 100644
--- a/pages/home/index.vue
+++ b/pages/home/index.vue
@@ -1,6 +1,8 @@
+
+
@@ -239,11 +241,37 @@
}
})
},
+ /** 打开扫码认领就诊人弹窗 */
+ openClaimPatientModal() {
+ const modal = this.$refs.claimPatientModal
+ if (modal && modal.openFromStorage) {
+ modal.openFromStorage()
+ }
+ },
+ /** 打开医生代付确认弹窗 */
+ openProxyPayConfirmModal() {
+ const modal = this.$refs.proxyPayConfirmModal
+ if (modal && modal.openFromStorage) {
+ modal.openFromStorage()
+ }
+ },
},
mounted() {
this.getShow()
this.getList()
- }
+ uni.$on('open-claim-patient-modal', this.openClaimPatientModal)
+ uni.$on('open-proxy-pay-confirm-modal', this.openProxyPayConfirmModal)
+ this.openClaimPatientModal()
+ this.openProxyPayConfirmModal()
+ },
+ onShow() {
+ this.openClaimPatientModal()
+ this.openProxyPayConfirmModal()
+ },
+ onUnload() {
+ uni.$off('open-claim-patient-modal', this.openClaimPatientModal)
+ uni.$off('open-proxy-pay-confirm-modal', this.openProxyPayConfirmModal)
+ },
}
diff --git a/request/api/api.js b/request/api/api.js
index 989bc38..ec6b8e0 100644
--- a/request/api/api.js
+++ b/request/api/api.js
@@ -186,10 +186,10 @@ export async function registeInfo(params) {
return data
}
-// 支付挂号
+// 支付挂号(xk-api register/pay,易票联)
export async function registePay(params) {
- let data = await http('/oldApi/v1/register/pay', params)
- return data
+ let data = await http('/xkApi/register/pay', params)
+ return normalizeXkApiResponse(data)
}
// 取消挂号
@@ -289,16 +289,16 @@ export async function getPrescriptInfo(params) {
return data
}
-// 我的 处方支付
+// 我的 处方支付(xk-api)
export async function getPrescriptPay(params) {
- let data = await http('/oldApi/v1/product-order/pay', params)
- return data
+ let data = await http('/xkApi/product-order/pay', params)
+ return normalizeXkApiResponse(data)
}
-// 我的 处方-产品订单信息
+// 我的 处方-产品订单信息(xk-api appoint-medicine)
export async function getProductInfo(params) {
- let data = await http('/oldApi/v1/product-order/appoint-medicine', params)
- return data
+ let data = await http('/xkApi/product-order/appoint-medicine', params)
+ return normalizeXkApiResponse(data)
}
// 消息
@@ -362,10 +362,21 @@ export async function getUseWayPay(params) {
return data
}
-// 更新配送方式(Laravel:单品包邮重算)
+/**
+ * 更新配送方式(xk-api:单品包邮重算)
+ * 代付时带 proxy_pay=1,或与 getPayConfig 一样从 storage 自动附带
+ */
export async function getDelivery(params) {
- let data = await http('/xkApi/product-order/update-delivery', params)
- return data
+ const payload = params && typeof params === 'object' ? { ...params } : { method: 'post', data: {} }
+ const data = payload.data && typeof payload.data === 'object' ? { ...payload.data } : {}
+ const orderId = Number(data.order_id || 0)
+ const proxyOrderId = Number(uni.getStorageSync('proxy_pay_order_id') || 0)
+ if (!data.proxy_pay && proxyOrderId > 0 && orderId === proxyOrderId) {
+ data.proxy_pay = 1
+ }
+ payload.data = data
+ let res = await http('/xkApi/product-order/update-delivery', payload)
+ return normalizeXkApiResponse(res)
}
// 更新代煎服务费用 http://xiaokang.com/member/v1/product-order/update-decoct-service
@@ -486,10 +497,21 @@ export async function PayList(params) {
// return data
// }
+/**
+ * 商品订单支付(xk-api)
+ * 代付时在 data 中带 proxy_pay=1;也可从 storage proxy_pay_order_id 自动附带
+ */
export async function getPayConfig(params) {
- let data = await http('/oldApi/v1/product-order/pay', params)
- // let data = await http('/newApi/mobile/product-order/pay', params)
- return data
+ const payload = params && typeof params === 'object' ? { ...params } : { method: 'post', data: {} }
+ const data = payload.data && typeof payload.data === 'object' ? { ...payload.data } : {}
+ const orderId = Number(data.order_id || 0)
+ const proxyOrderId = Number(uni.getStorageSync('proxy_pay_order_id') || 0)
+ if (!data.proxy_pay && proxyOrderId > 0 && orderId === proxyOrderId) {
+ data.proxy_pay = 1
+ }
+ payload.data = data
+ let res = await http('/xkApi/product-order/pay', payload)
+ return normalizeXkApiResponse(res)
}
// getOrdlist 获取订单列表 https://zjxk.app.ctkj88.com/member/order/lists
// export async function getOrdlist(params) {
@@ -508,10 +530,10 @@ export async function getCancle(params) {
// return data
// }
-// 更换 订单详情 https://app.xiaokang88.com/member/v1/product-order/info
+// 订单详情(xk-api product-order/info,drug-info 页)
export async function getOrdDetail(params) {
- let data = await http('/oldApi/v1/product-order/info', params)
- return data
+ let data = await http('/xkApi/product-order/info', params)
+ return normalizeXkApiResponse(data)
}
diff --git a/request/api/patient.js b/request/api/patient.js
index 2e9766a..ee4de6f 100644
--- a/request/api/patient.js
+++ b/request/api/patient.js
@@ -39,3 +39,8 @@ export async function changePatientDefaultApi(params = {}) {
export async function getPatientHealthInfoApi(params = {}) {
return await post('/patient/health-info', params, 3)
}
+
+/** 扫码认领医生创建的就诊人 POST /patient/claim,传 user_patient_id */
+export async function claimPatientApi(params = {}) {
+ return await post('/patient/claim', params, 3)
+}
diff --git a/subPackages/my/my-drug/drug-info.vue b/subPackages/my/my-drug/drug-info.vue
index d2e8219..0121862 100644
--- a/subPackages/my/my-drug/drug-info.vue
+++ b/subPackages/my/my-drug/drug-info.vue
@@ -6,7 +6,7 @@
{{ orderText }}
-
+
订单已取消
@@ -21,10 +21,10 @@
+ v-if="orderInfo.product_order.status==0&&orderInfo.product_order.is_pay==0 && orderInfo.product_order.cancel_status==0">
配送方式
- {{orderInfo.ProductOrder.delivery_method==0&&'快递到家'||orderInfo.ProductOrder.delivery_method==1&&'到店自取'}}
+ {{orderInfo.product_order.delivery_method==0&&'快递到家'||orderInfo.product_order.delivery_method==1&&'到店自取'}}
@@ -38,14 +38,14 @@
-
+
请先选择收货地址
-
+
{{ parsedAddress.name || '请先选择收货地址' }}
{{ parsedAddress.mobile || '' }}
-
+
{{ parsedAddress.region || '' }}{{ parsedAddress.detail_address || '' }}
@@ -65,7 +65,7 @@
-
+
到店自取
@@ -85,8 +85,8 @@
-
+ v-if="orderInfo.product_order.prescription_type==1">
+
{{item.drug_name}}
x{{item.number}}
@@ -96,8 +96,8 @@
-
-
+
+
@@ -109,7 +109,7 @@
class="drug-spec">{{ item.drug.specification }}
{{ item.drug.function }}
-
+
{{ item.drug.usage }}
@@ -134,32 +134,32 @@
商品总价(包含服务费)
- ¥{{orderInfo.ProductOrder.items_price}}
+ ¥{{orderInfo.product_order.items_price}}
快递费
- ¥{{orderInfo.ProductOrder.trans_expenses}}
+ ¥{{orderInfo.product_order.trans_expenses}}
诊疗费
- ¥{{orderInfo.ProductOrder.treatement_price}}
+ ¥{{orderInfo.product_order.treatement_price}}
加工费
共{{payWay.dosage}}剂¥{{orderInfo.ProductOrder.process_price}}
+ v-if="payWay">共{{payWay.dosage}}剂¥{{orderInfo.product_order.process_price}}
总金额
合计:
- ¥{{orderInfo.ProductOrder.total_pay_price}}
+ ¥{{orderInfo.product_order.total_pay_price}}
-
+
支付时间
- {{orderInfo.ProductOrder.pay_time | formatDate}}
+ {{orderInfo.product_order.pay_time | formatDate}}
@@ -194,7 +194,7 @@
@@ -228,7 +228,7 @@ export default {
check: false
},
orderInfo: {
- ProductOrder: {}
+ product_order: {}
}, // 订单
chinese: [],
west: [],
@@ -294,26 +294,26 @@ export default {
computed: {
parsedAddress() {
try {
- return JSON.parse(this.orderInfo.ProductOrder.address || '{}')
+ return JSON.parse(this.orderInfo.product_order.address || '{}')
} catch (e) {
return {}
}
},
canEditAddress() {
- const o = this.orderInfo.ProductOrder
+ const o = this.orderInfo.product_order
return this.isshow && o.status == 0 && o.cancel_status == 0
},
canViewAddressReadonly() {
- const o = this.orderInfo.ProductOrder
+ const o = this.orderInfo.product_order
return o.delivery_method == 0 && o.status != 0 && o.address && o.cancel_status == 0
},
// 整单存在任一外部配送仓时:隐藏顶部文案,改在药品行展示
hasDeliveryWarehouse() {
- const o = this.orderInfo && this.orderInfo.ProductOrder
+ const o = this.orderInfo && this.orderInfo.product_order
if (o && Number(o.has_delivery_warehouse) === 1) {
return true
}
- const items = (this.orderInfo && this.orderInfo.ProductOrderItems) || []
+ const items = (this.orderInfo && this.orderInfo.product_order_items) || []
for (let i = 0; i < items.length; i++) {
if (Number(items[i].delivery_warehouse_id || 0) > 0) {
return true
@@ -335,7 +335,7 @@ export default {
goDrugDetail(item) {
const drugId = item.drug_id || (item.drug && item.drug.id);
if (!drugId) return;
- const orderStoreId = (this.orderInfo.ProductOrder && this.orderInfo.ProductOrder.store_id)
+ const orderStoreId = (this.orderInfo.product_order && this.orderInfo.product_order.store_id)
|| uni.getStorageSync('store_id')
|| '11001';
const q = [
@@ -440,7 +440,7 @@ export default {
// 快递到家:已有地址则直接切配送;否则去地址页(地址页会带 delivery_method=0 提交)
// 禁止在此处只改本地状态而不调接口,否则 onShow 可能用旧 delivery_method=1 覆盖
- const hasAddress = !!(this.orderInfo.ProductOrder && this.orderInfo.ProductOrder.address_id)
+ const hasAddress = !!(this.orderInfo.product_order && this.orderInfo.product_order.address_id)
|| !!uni.getStorageSync('address_id')
if (hasAddress) {
this.toUpdata(0)
@@ -459,7 +459,7 @@ export default {
const targetDeliveryMethod = deliveryMethodIndex
const addressId = uni.getStorageSync('address_id')
- || (this.orderInfo.ProductOrder && this.orderInfo.ProductOrder.address_id)
+ || (this.orderInfo.product_order && this.orderInfo.product_order.address_id)
|| 0
getDelivery({
@@ -531,9 +531,9 @@ export default {
if (res.data.errcode == 0) {
this.orderInfo = res.data.data
this.patientInfo = res.data.data.patient || null
- this.order_id = res.data.data.ProductOrder.id
- uni.setStorageSync('userWay_order_id', res.data.data.ProductOrder.id)
- uni.setStorageSync('delivery_method', res.data.data.ProductOrder.delivery_method)
+ this.order_id = res.data.data.product_order.id
+ uni.setStorageSync('userWay_order_id', res.data.data.product_order.id)
+ uni.setStorageSync('delivery_method', res.data.data.product_order.delivery_method)
// 使用API返回的处方来源诊所信息(优先使用处方来源诊所)
if (res.data.data.store && res.data.data.store.store) {
@@ -548,8 +548,8 @@ export default {
}
// 检查 is_online 字段,动态控制 list 数组
- if (res.data.data.ProductOrder && res.data.data.ProductOrder.is_online !== undefined) {
- this.is_online = res.data.data.ProductOrder.is_online
+ if (res.data.data.product_order && res.data.data.product_order.is_online !== undefined) {
+ this.is_online = res.data.data.product_order.is_online
} else if (res.data.data.is_online !== undefined) {
this.is_online = res.data.data.is_online
}
@@ -565,8 +565,8 @@ export default {
}
// 根据返回的订单数据更新页面状态(配送方式)
- if (res.data.data.ProductOrder && res.data.data.ProductOrder.delivery_method !== undefined) {
- const deliveryMethod = res.data.data.ProductOrder.delivery_method
+ if (res.data.data.product_order && res.data.data.product_order.delivery_method !== undefined) {
+ const deliveryMethod = res.data.data.product_order.delivery_method
this.delivery_method = deliveryMethod
if (deliveryMethod == 1) {
this.isshowed = true
diff --git a/subPackages/my/record-pay.vue b/subPackages/my/record-pay.vue
index c893987..47cc6de 100644
--- a/subPackages/my/record-pay.vue
+++ b/subPackages/my/record-pay.vue
@@ -6,7 +6,7 @@
{{ orderText }}
-
+
订单已取消
@@ -20,7 +20,7 @@
-
+
配送方式
{{wayText}}
@@ -30,22 +30,22 @@
-
+
收货地址
-
+
请先选择收货地址
-
- {{JSON.parse(orderInfo.ProductOrder.address).name || '请先选择收货地址'}}
- {{JSON.parse(orderInfo.ProductOrder.address).mobile || ''}}
+
+ {{JSON.parse(orderInfo.product_order.address).name || '请先选择收货地址'}}
+ {{JSON.parse(orderInfo.product_order.address).mobile || ''}}
-
- {{JSON.parse(orderInfo.ProductOrder.address).region || ''}}{{JSON.parse(orderInfo.ProductOrder.address).detail_address || ''}}
+
+ {{JSON.parse(orderInfo.product_order.address).region || ''}}{{JSON.parse(orderInfo.product_order.address).detail_address || ''}}
@@ -126,29 +126,29 @@
商品总价(包含服务费)
- ¥{{orderInfo.ProductOrder.items_price}}
+ ¥{{orderInfo.product_order.items_price}}
快递费
- ¥{{orderInfo.ProductOrder.trans_expenses}}
+ ¥{{orderInfo.product_order.trans_expenses}}
诊疗费
- ¥{{orderInfo.ProductOrder.treatement_price}}
+ ¥{{orderInfo.product_order.treatement_price}}
加工费
共{{payWay.dosage}}剂
- ¥{{orderInfo.ProductOrder.process_price}}
+ ¥{{orderInfo.product_order.process_price}}
-
+
总金额
合计:
- ¥{{orderInfo.ProductOrder.total_pay_price}}
+ ¥{{orderInfo.product_order.total_pay_price}}
@@ -189,8 +189,13 @@
>
+
+
+ 当前为医生代付订单
+ 取消代付
+
-