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( router.post(
'/worker-platform/orders/:workOrderId/assign', '/worker-platform/orders/:workOrderId/assign',
requireAdminRoles(['admin', 'operator']), requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler( createJsonHandler(
(req) => assignAdminWorkOrderToWorker(String(req.params.workOrderId || ''), req.body || {}), (req) => assignAdminWorkOrderToWorker(String(req.params.workOrderId || ''), req.body || {}),
{ {
@@ -379,7 +379,7 @@ router.delete(
router.post( router.post(
'/worker-platform/orders/:workOrderId/publish', '/worker-platform/orders/:workOrderId/publish',
requireAdminRoles(['admin', 'operator']), requireAdminRoles(['admin', 'operator', 'support']),
createJsonHandler((req) => publishAdminWorkOrder(String(req.params.workOrderId || '')), { createJsonHandler((req) => publishAdminWorkOrder(String(req.params.workOrderId || '')), {
successMessage: '订单已发布到抢单大厅', successMessage: '订单已发布到抢单大厅',
errorMessage: '发布接单订单失败', errorMessage: '发布接单订单失败',
@@ -247,11 +247,6 @@ export async function saveAdminWorkProductRule(payload: JsonObject = {}) {
errorCode: 'work_product_rule_sharing_amount_invalid', 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 const finalRewardAmount = sharingEnabled ? resolvedSharingTotalAmount : rewardAmount
@@ -1001,6 +996,12 @@ export async function publishAdminWorkOrder(workOrderId: number | string) {
errorCode: 'work_order_publish_status_invalid', 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 now = nowIso()
const updated = await updateWorkOrder(workOrder.id, { const updated = await updateWorkOrder(workOrder.id, {
status: WORK_ORDER_STATUS.OPEN, status: WORK_ORDER_STATUS.OPEN,
@@ -454,9 +454,13 @@ export default function ProductRulesPanel() {
/> />
</Form.Item> </Form.Item>
) : ( ) : (
<Form.Item label="接单金额" name="rewardAmount"> <Form.Item
label="接单金额"
name="rewardAmount"
extra="可填 0,但接单金额为 0 的工单不能发布到大厅"
>
<InputNumber <InputNumber
min={0.01} min={0}
step={1} step={1}
addonAfter="元" addonAfter="元"
className="full-width" className="full-width"
@@ -661,6 +661,12 @@ export default function WorkOrdersPanel() {
{row.status === 'unassigned' ? ( {row.status === 'unassigned' ? (
<Button <Button
icon={<SendOutlined />} icon={<SendOutlined />}
disabled={Number(row.rewardAmount || 0) <= 0}
title={
Number(row.rewardAmount || 0) <= 0
? '接单金额为 0,不能发布到大厅'
: undefined
}
onClick={() => onClick={() =>
runAction( runAction(
() => publishAdminWorkOrder(row.workOrderId), () => publishAdminWorkOrder(row.workOrderId),