feat: 物品规则接单金额可填0并限制零元发布,客服增加发单指派权限

- 物品规则接单金额允许填 0(按数量计价不受影响)
- 接单金额为 0 的工单禁止发布:前端发布按钮置灰 + 后端 409 拦截
- 客服(support)获得发布工单与指派打手权限
This commit is contained in:
yml2213
2026-08-15 11:16:26 +08:00
parent 57ceac7143
commit 1131780186
4 changed files with 20 additions and 9 deletions
@@ -344,7 +344,7 @@ router.put(
router.post(
'/worker-platform/orders/:workOrderId/assign',
requireAdminRoles(['admin', 'operator']),
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler(
(req) => assignAdminWorkOrderToWorker(String(req.params.workOrderId || ''), req.body || {}),
{
@@ -379,7 +379,7 @@ router.delete(
router.post(
'/worker-platform/orders/:workOrderId/publish',
requireAdminRoles(['admin', 'operator']),
requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => publishAdminWorkOrder(String(req.params.workOrderId || '')), {
successMessage: '订单已发布到抢单大厅',
errorMessage: '发布接单订单失败',
@@ -247,11 +247,6 @@ export async function saveAdminWorkProductRule(payload: JsonObject = {}) {
errorCode: 'work_product_rule_sharing_amount_invalid',
})
}
} else if (rewardAmount <= 0 && unitPriceFen <= 0) {
throw createHttpError('接单金额必须大于 0', {
statusCode: 400,
errorCode: 'work_product_rule_reward_invalid',
})
}
const finalRewardAmount = sharingEnabled ? resolvedSharingTotalAmount : rewardAmount
@@ -1001,6 +996,12 @@ export async function publishAdminWorkOrder(workOrderId: number | string) {
errorCode: 'work_order_publish_status_invalid',
})
}
if (Number(workOrder.reward_amount || 0) <= 0) {
throw createHttpError('接单金额为 0,无法发布到大厅', {
statusCode: 409,
errorCode: 'work_order_publish_reward_invalid',
})
}
const now = nowIso()
const updated = await updateWorkOrder(workOrder.id, {
status: WORK_ORDER_STATUS.OPEN,
@@ -454,9 +454,13 @@ export default function ProductRulesPanel() {
/>
</Form.Item>
) : (
<Form.Item label="接单金额" name="rewardAmount">
<Form.Item
label="接单金额"
name="rewardAmount"
extra="可填 0,但接单金额为 0 的工单不能发布到大厅"
>
<InputNumber
min={0.01}
min={0}
step={1}
addonAfter="元"
className="full-width"
@@ -661,6 +661,12 @@ export default function WorkOrdersPanel() {
{row.status === 'unassigned' ? (
<Button
icon={<SendOutlined />}
disabled={Number(row.rewardAmount || 0) <= 0}
title={
Number(row.rewardAmount || 0) <= 0
? '接单金额为 0,不能发布到大厅'
: undefined
}
onClick={() =>
runAction(
() => publishAdminWorkOrder(row.workOrderId),