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:系统#安卓,苹果)"
>
-