diff --git a/apps/backend/src/routes/admin/worker-platform.ts b/apps/backend/src/routes/admin/worker-platform.ts index 235dc59f..4f84a85c 100644 --- a/apps/backend/src/routes/admin/worker-platform.ts +++ b/apps/backend/src/routes/admin/worker-platform.ts @@ -328,7 +328,10 @@ router.put( '/worker-platform/orders/:workOrderId', requireAdminRoles(['admin', 'operator', 'support']), createJsonHandler( - (req) => updateAdminWorkOrder(String(req.params.workOrderId || ''), req.body || {}), + (req) => + updateAdminWorkOrder(String(req.params.workOrderId || ''), req.body || {}, { + canEditRequirementFields: req.adminSession?.role !== 'support', + }), { successMessage: '工单信息已保存', errorMessage: '保存工单信息失败', diff --git a/apps/backend/src/services/worker-platform/admin-service.ts b/apps/backend/src/services/worker-platform/admin-service.ts index 30ad23af..e1a4e286 100644 --- a/apps/backend/src/services/worker-platform/admin-service.ts +++ b/apps/backend/src/services/worker-platform/admin-service.ts @@ -872,6 +872,7 @@ export async function createAdminMockWorkOrder(payload: JsonObject = {}) { export async function updateAdminWorkOrder( workOrderId: number | string, payload: JsonObject = {}, + options: { canEditRequirementFields?: boolean } = {}, ) { const workOrder = await getRequiredWorkOrder(workOrderId) if ( @@ -893,7 +894,10 @@ export async function updateAdminWorkOrder( }) } - const fields = normalizeRequirementFieldsFromPayload(payload) + const fields = + options.canEditRequirementFields === false + ? resolveRequirementFields(workOrder) + : normalizeRequirementFieldsFromPayload(payload) const rewardAmount = payload.rewardAmount === undefined ? workOrder.reward_amount diff --git a/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx b/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx index 67e686c3..12910326 100644 --- a/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx @@ -91,6 +91,7 @@ import { ADMIN_DEFAULT_PAGE_SIZE, buildAdminTablePagination, } from '@/utils/admin-pagination' +import { hasAdminRole } from '@/utils/admin-auth' import { formatAdminDateTime } from '@/utils/admin-time' import { DeadlineCountdown, @@ -117,6 +118,7 @@ export default function WorkOrdersPanel() { const { message, modal } = App.useApp() const navigate = useNavigate() const queryClient = useQueryClient() + const canEditRequirementFields = hasAdminRole('operator') const [status, setStatus] = useState('') const [keyword, setKeyword] = useState('') const [keywordInput, setKeywordInput] = useState('') @@ -430,7 +432,9 @@ export default function WorkOrdersPanel() { categoryId: values.categoryId || null, rewardAmount: Number(values.rewardAmount || 0), requiredDepositAmount: Number(values.requiredDepositAmount || 0), - fieldsText: String(values.fieldsText || ''), + ...(canEditRequirementFields + ? { fieldsText: String(values.fieldsText || '') } + : {}), timeoutMinutes: Math.max(0, Number(values.timeoutMinutes || 0)), timeoutPolicy: values.timeoutPolicy || 'reopen', }), @@ -1089,7 +1093,7 @@ export default function WorkOrdersPanel() { name="fieldsText" extra="每行一个字段:key:名称,下拉项用 # 分隔(如 system:系统#安卓,苹果)" > - +