diff --git a/admin/src/api/tcm.ts b/admin/src/api/tcm.ts
index e243f16e..df315d29 100644
--- a/admin/src/api/tcm.ts
+++ b/admin/src/api/tcm.ts
@@ -468,6 +468,8 @@ export function prescriptionOrderAddPayOrder(params: {
pay_amount: number
pay_remark?: string
completion_request?: number
+ /** 创建方式:fubei 付呗(默认) / express_cod 快递代收 */
+ pay_create_type?: 'fubei' | 'express_cod'
}) {
return request.post({ url: '/tcm.prescriptionOrder/addPayOrder', params })
}
diff --git a/admin/src/views/consumer/prescription/order_list.vue b/admin/src/views/consumer/prescription/order_list.vue
index ec290e62..c04089c0 100644
--- a/admin/src/views/consumer/prescription/order_list.vue
+++ b/admin/src/views/consumer/prescription/order_list.vue
@@ -1522,13 +1522,14 @@
付呗
+ 快递代收
关联已有
直接完单申请
-
-
+
+
@@ -4274,11 +4275,14 @@ const addPayOrderAlertTitle = computed(() => {
if (addPayOrderForm.add_mode === 'completion_only') {
return '不创建或关联支付单,仅提交完单申请,由审核人员在支付审核时处理。'
}
+ if (addPayOrderForm.add_mode === 'create_express') {
+ return '通过快递代收创建新支付单(流转同付呗),或关联已存在但未绑定的支付单。'
+ }
return '可以通过付呗创建新支付单,或关联已存在但未绑定的支付单。'
})
const addPayOrderForm = reactive({
- add_mode: 'create' as 'create' | 'link' | 'completion_only',
+ add_mode: 'create' as 'create' | 'create_express' | 'link' | 'completion_only',
order_type: 3,
pay_amount: undefined as number | undefined,
pay_remark: '',
@@ -4290,7 +4294,7 @@ const addPayOrderRules = computed(() => {
const rules: FormRules = {
add_mode: [{ required: true, message: '请选择添加方式', trigger: 'change' }]
}
- if (addPayOrderForm.add_mode === 'create') {
+ if (addPayOrderForm.add_mode === 'create' || addPayOrderForm.add_mode === 'create_express') {
rules.order_type = [{ required: true, message: '请选择费用类别', trigger: 'change' }]
rules.pay_amount = [
{
@@ -4377,14 +4381,19 @@ async function submitAddPayOrder() {
if (addPayOrderForm.add_mode === 'completion_only') {
await prescriptionOrderRequestCompletion({ id: addPayOrderRowId.value })
feedback.msgSuccess('完单申请已提交,请等待支付审核')
- } else if (addPayOrderForm.add_mode === 'create') {
- // 手动创建新支付单
+ } else if (
+ addPayOrderForm.add_mode === 'create' ||
+ addPayOrderForm.add_mode === 'create_express'
+ ) {
+ // 手动创建新支付单(付呗 / 快递代收)
await prescriptionOrderAddPayOrder({
id: addPayOrderRowId.value,
order_type: addPayOrderForm.order_type,
pay_amount: addPayOrderForm.pay_amount!,
pay_remark: addPayOrderForm.pay_remark || '',
- completion_request: addPayOrderForm.completion_request
+ completion_request: addPayOrderForm.completion_request,
+ pay_create_type:
+ addPayOrderForm.add_mode === 'create_express' ? 'express_cod' : 'fubei'
})
feedback.msgSuccess('支付单已新增,请等待审核')
} else {
diff --git a/admin/src/views/consumer/prescription/order_list_h5.vue b/admin/src/views/consumer/prescription/order_list_h5.vue
index d68f0a5c..414e30df 100644
--- a/admin/src/views/consumer/prescription/order_list_h5.vue
+++ b/admin/src/views/consumer/prescription/order_list_h5.vue
@@ -1998,13 +1998,14 @@
付呗
+ 快递代收
关联已有
直接完单申请
-
-
+
+
@@ -4955,10 +4956,13 @@ const addPayOrderAlertTitle = computed(() => {
if (addPayOrderForm.add_mode === 'completion_only') {
return '不创建或关联支付单,仅提交完单申请,由审核人员在支付审核时处理。'
}
+ if (addPayOrderForm.add_mode === 'create_express') {
+ return '通过快递代收创建新支付单(流转同付呗),或关联已存在但未绑定的支付单。'
+ }
return '可以通过付呗创建新支付单,或关联已存在但未绑定的支付单。'
})
const addPayOrderForm = reactive({
- add_mode: 'create' as 'create' | 'link' | 'completion_only',
+ add_mode: 'create' as 'create' | 'create_express' | 'link' | 'completion_only',
order_type: 3,
pay_amount: undefined as number | undefined,
pay_remark: '',
@@ -4970,7 +4974,7 @@ const addPayOrderRules = computed(() => {
const rules: FormRules = {
add_mode: [{ required: true, message: '请选择添加方式', trigger: 'change' }]
}
- if (addPayOrderForm.add_mode === 'create') {
+ if (addPayOrderForm.add_mode === 'create' || addPayOrderForm.add_mode === 'create_express') {
rules.order_type = [{ required: true, message: '请选择费用类别', trigger: 'change' }]
rules.pay_amount = [
{ required: true, message: '请输入支付金额', trigger: 'blur' },
@@ -5054,14 +5058,19 @@ async function submitAddPayOrder() {
if (addPayOrderForm.add_mode === 'completion_only') {
await prescriptionOrderRequestCompletion({ id: addPayOrderRowId.value })
feedback.msgSuccess('完单申请已提交,请等待支付审核')
- } else if (addPayOrderForm.add_mode === 'create') {
- // 手动创建新支付单
+ } else if (
+ addPayOrderForm.add_mode === 'create' ||
+ addPayOrderForm.add_mode === 'create_express'
+ ) {
+ // 手动创建新支付单(付呗 / 快递代收)
await prescriptionOrderAddPayOrder({
id: addPayOrderRowId.value,
order_type: addPayOrderForm.order_type,
pay_amount: addPayOrderForm.pay_amount!,
pay_remark: addPayOrderForm.pay_remark || '',
- completion_request: addPayOrderForm.completion_request
+ completion_request: addPayOrderForm.completion_request,
+ pay_create_type:
+ addPayOrderForm.add_mode === 'create_express' ? 'express_cod' : 'fubei'
})
feedback.msgSuccess('支付单已新增,请等待审核')
} else {
diff --git a/admin/src/views/order/index.vue b/admin/src/views/order/index.vue
index d4f1484b..d9724597 100644
--- a/admin/src/views/order/index.vue
+++ b/admin/src/views/order/index.vue
@@ -220,7 +220,7 @@
编辑
@@ -502,6 +502,7 @@
普通订单
企业微信对外收款
付呗
+ 快递代收
付呗
通过付呗收款的支付单,创建后请按实际对账/审核流程在列表中处理。
-
+
+ 快递代收
+ 通过快递代收的支付单,流转与付呗一致;审核通过/确认到账后将更新为已支付。
+
+
([])
const createForm = reactive({
- createType: 'normal' as 'normal' | 'wechat_work' | 'fubei',
- /** 仅「付呗」:开启后订单为待审核(5) */
+ createType: 'normal' as 'normal' | 'wechat_work' | 'fubei' | 'express_cod',
+ /** 「付呗」「快递代收」:开启后订单为待审核(5) */
requirePaymentSlipAudit: false,
patient_id: '',
order_type: '',
@@ -1167,13 +1181,17 @@ const submitCreateOrder = async () => {
if (createForm.createType === 'fubei') {
params.payment_channel = 'fubei'
params.require_payment_slip_audit = createForm.requirePaymentSlipAudit ? 1 : 0
+ } else if (createForm.createType === 'express_cod') {
+ params.payment_channel = 'express_cod'
+ params.require_payment_slip_audit = createForm.requirePaymentSlipAudit ? 1 : 0
} else {
params.payment_channel = 'normal'
params.require_payment_slip_audit = 0
}
await orderCreate(params)
const tip =
- createForm.createType === 'fubei' && createForm.requirePaymentSlipAudit
+ (createForm.createType === 'fubei' || createForm.createType === 'express_cod') &&
+ createForm.requirePaymentSlipAudit
? '订单已创建,支付状态为「待审核」'
: '订单创建成功'
feedback.msgSuccess(tip)
@@ -1254,10 +1272,11 @@ const getCreateTypeText = (row: any) => {
const createTypeMap: Record = {
normal: '普通订单',
wechat_work: '企业微信对外收款',
- fubei: '付呗'
+ fubei: '付呗',
+ express_cod: '快递代收'
}
const ct = row?.create_type
- if (ct === 'wechat_work' || ct === 'fubei') {
+ if (ct === 'wechat_work' || ct === 'fubei' || ct === 'express_cod') {
return createTypeMap[ct]
}
if (ct === 'normal' && row?.payment_method) {
@@ -1395,7 +1414,8 @@ const handleDetail = async (row: any) => {
// 支付订单
const handlePay = (row: any) => {
- const fubeiPending = row.status === 5 && row.payment_method === 'fubei'
+ const fubeiPending =
+ row.status === 5 && (row.payment_method === 'fubei' || row.create_type === 'express_cod')
payForm.value = {
order_id: row.id,
order_no: row.order_no,
diff --git a/server/app/adminapi/controller/order/OrderController.php b/server/app/adminapi/controller/order/OrderController.php
index e16941d0..7abee035 100755
--- a/server/app/adminapi/controller/order/OrderController.php
+++ b/server/app/adminapi/controller/order/OrderController.php
@@ -207,11 +207,17 @@ class OrderController extends BaseAdminController
$params['creator_id'] = $this->adminId;
$params['payment_channel'] = (string)$this->request->post('payment_channel', 'normal');
$params['require_payment_slip_audit'] = (int)$this->request->post('require_payment_slip_audit', 0);
- // 创建方式:优先取前端透传的 create_type,否则按 payment_channel 派生(fubei→fubei,其余 normal)
+ // 创建方式:优先取前端透传的 create_type,否则按 payment_channel 派生(fubei→fubei,express_cod→express_cod,其余 normal)
$createTypeReq = (string)$this->request->post('create_type', '');
- $params['create_type'] = in_array($createTypeReq, ['normal', 'wechat_work', 'fubei'], true)
- ? $createTypeReq
- : ($params['payment_channel'] === 'fubei' ? 'fubei' : 'normal');
+ if (in_array($createTypeReq, ['normal', 'wechat_work', 'fubei', 'express_cod'], true)) {
+ $params['create_type'] = $createTypeReq;
+ } elseif ($params['payment_channel'] === 'fubei') {
+ $params['create_type'] = 'fubei';
+ } elseif ($params['payment_channel'] === 'express_cod') {
+ $params['create_type'] = 'express_cod';
+ } else {
+ $params['create_type'] = 'normal';
+ }
$result = OrderLogic::create($params);
if (!$result) {
diff --git a/server/app/adminapi/logic/order/OrderLogic.php b/server/app/adminapi/logic/order/OrderLogic.php
index d302472b..f57b26a3 100755
--- a/server/app/adminapi/logic/order/OrderLogic.php
+++ b/server/app/adminapi/logic/order/OrderLogic.php
@@ -23,9 +23,9 @@ use think\facade\Log;
class OrderLogic
{
/**
- * 创建方式统一三值:normal 普通订单 / wechat_work 企业微信对外收款 / fubei 付呗
+ * 创建方式:normal 普通订单 / wechat_work 企业微信对外收款 / fubei 付呗 / express_cod 快递代收
*/
- private const CREATE_TYPES = ['normal', 'wechat_work', 'fubei'];
+ private const CREATE_TYPES = ['normal', 'wechat_work', 'fubei', 'express_cod'];
/**
* @notes 生成订单号
@@ -64,6 +64,15 @@ class OrderLogic
return 'normal';
}
+ /**
+ * 是否为「待审核(5)且需人工确认到账」的单:付呗(payment_method=fubei) 或 快递代收(create_type=express_cod)
+ */
+ private static function isPendingManualAudit(Order $order): bool
+ {
+ return (string)($order->payment_method ?? '') === 'fubei'
+ || (string)($order->create_type ?? '') === 'express_cod';
+ }
+
/**
* @notes 创建订单
* @param array $params
@@ -73,11 +82,16 @@ class OrderLogic
{
try {
$channel = (string)($params['payment_channel'] ?? 'normal');
- if (!in_array($channel, ['normal', 'fubei'], true)) {
+ if (!in_array($channel, ['normal', 'fubei', 'express_cod'], true)) {
$channel = 'normal';
}
$paymentMethod = $channel === 'fubei' ? 'fubei' : null;
- $createType = self::normalizeCreateType((string)($params['create_type'] ?? ''), $paymentMethod);
+ // 快递代收:以 express_cod 标记创建方式(与 fubei 流转一致,但 payment_method 待到账时再写)
+ $createTypeHint = $channel === 'express_cod' ? 'express_cod' : '';
+ $createType = self::normalizeCreateType(
+ (string)($params['create_type'] ?? $createTypeHint),
+ $paymentMethod
+ );
$requirePaymentSlipAudit = (int)($params['require_payment_slip_audit'] ?? 0) === 1;
$order = new Order();
@@ -87,10 +101,13 @@ class OrderLogic
$order->order_type = $params['order_type'];
$order->amount = $params['amount'];
$order->create_type = $createType;
- // 付呗且申请审核支付单:待审核(5);否则待支付(1)
+ // 付呗/快递代收且申请审核支付单:待审核(5);否则待支付(1)
if ($channel === 'fubei') {
$order->payment_method = 'fubei';
$order->status = $requirePaymentSlipAudit ? 5 : 1;
+ } elseif ($channel === 'express_cod') {
+ // payment_method 留空,待人工确认到账时再写真实支付方式
+ $order->status = $requirePaymentSlipAudit ? 5 : 1;
} else {
$order->status = 1; // 待支付
}
@@ -387,11 +404,11 @@ class OrderLogic
}
$st = (int)$order->status;
- // 1=待支付;5=待审核(付呗+申请支付单审核) 时允许录入手动到账
+ // 1=待支付;5=待审核(付呗/快递代收+申请支付单审核) 时允许录入手动到账
if ($st === 1) {
// 正常待支付
- } elseif ($st === 5 && (string)($order->payment_method ?? '') === 'fubei') {
- // 待审核的付呗单,通过人工确认后标记已支付
+ } elseif ($st === 5 && self::isPendingManualAudit($order)) {
+ // 待审核的付呗/快递代收单,通过人工确认后标记已支付
} else {
self::setError('订单状态不允许支付');
return false;
@@ -424,8 +441,8 @@ class OrderLogic
}
$st = (int)$order->status;
- if ($st !== 1 && !($st === 5 && (string)($order->payment_method ?? '') === 'fubei')) {
- self::setError('只有待支付或待审核(付呗)的订单才能取消');
+ if ($st !== 1 && !($st === 5 && self::isPendingManualAudit($order))) {
+ self::setError('只有待支付或待审核(付呗/快递代收)的订单才能取消');
return false;
}
@@ -509,13 +526,13 @@ class OrderLogic
}
$st = (int) $order->status;
- if ($st === 5 && (string) ($order->payment_method ?? '') !== 'fubei') {
- self::setError('待审核订单仅支持付呗渠道拆分');
+ if ($st === 5 && !self::isPendingManualAudit($order)) {
+ self::setError('待审核订单仅支持付呗/快递代收渠道拆分');
return false;
}
if (! in_array($st, [1, 5, 2], true)) {
- self::setError('仅「待支付」「待审核(付呗)」或「已支付」的订单可拆分');
+ self::setError('仅「待支付」「待审核(付呗/快递代收)」或「已支付」的订单可拆分');
return false;
}
@@ -586,7 +603,10 @@ class OrderLogic
(string) ($order->remark ?? '')
);
if ($st === 5) {
- $n->payment_method = 'fubei';
+ // 付呗子单沿用 payment_method=fubei;快递代收子单 payment_method 留空,靠 create_type 标记
+ if ((string) ($order->payment_method ?? '') === 'fubei') {
+ $n->payment_method = 'fubei';
+ }
$n->status = 5;
} elseif ($st === 2) {
$n->status = 2;
diff --git a/server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php b/server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php
index 2225cfe9..4bbf6602 100755
--- a/server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php
+++ b/server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php
@@ -2324,7 +2324,8 @@ class PrescriptionOrderLogic
->where(function ($query) {
$query->where('payment_method', 'manual')
->whereOr('payment_method', 'fubei')
- ->whereOr('create_type', 'fubei');
+ ->whereOr('create_type', 'fubei')
+ ->whereOr('create_type', 'express_cod');
})
->update([
'status' => 5, // 待审核
@@ -2403,6 +2404,9 @@ class PrescriptionOrderLogic
$amount = round((float) ($params['pay_amount'] ?? 0), 2);
$remark = mb_substr(trim((string) ($params['pay_remark'] ?? '')), 0, 200);
$completionRequest = (int) ($params['completion_request'] ?? 0);
+ // 创建方式:付呗(默认) 或 快递代收(express_cod)
+ $payCreateType = (string) ($params['pay_create_type'] ?? 'fubei');
+ $isExpressCod = $payCreateType === 'express_cod';
if ($amount < 0) {
self::$error = '支付单金额不能为负数';
@@ -2417,8 +2421,13 @@ class PrescriptionOrderLogic
$payOrder->order_type = $orderType;
$payOrder->amount = $amount;
$payOrder->status = 5; // 待审核
- $payOrder->payment_method = 'fubei'; // 补齐支付单按「付呗」记账
- $payOrder->create_type = 'fubei';
+ if ($isExpressCod) {
+ // 快递代收:payment_method 留空,审核通过/到账后再写;用 create_type 标记
+ $payOrder->create_type = 'express_cod';
+ } else {
+ $payOrder->payment_method = 'fubei'; // 补齐支付单按「付呗」记账
+ $payOrder->create_type = 'fubei';
+ }
$payOrder->payment_time = null; // 审核通过后再设置支付时间
$payOrder->remark = $remark;