feat(order-service): 增加资料提交后自定义说明

This commit is contained in:
yml2213
2026-11-04 12:42:42 +08:00
parent 1a80521057
commit a276256d84
11 changed files with 60 additions and 3 deletions
@@ -0,0 +1,9 @@
-- 135_order_service_post_submit_text.sql
-- 客户提交资料后,页面底部展示的自定义说明。
ALTER TABLE order_service_profiles
ADD COLUMN IF NOT EXISTS post_submit_text TEXT NOT NULL
DEFAULT '资料提交后如需修改,请联系客服。';
COMMENT ON COLUMN order_service_profiles.post_submit_text IS
'客户资料页底部的提交后说明,支持多行文本';
@@ -15,6 +15,7 @@ export type OrderServiceProfileRow = {
material_confirmation_json: Record<string, unknown>
submit_text: string
success_text: string
post_submit_text: string
status: string
current_version_id: number | null
current_version_no: number | null
@@ -102,6 +103,7 @@ export async function upsertOrderServiceProfile(input: {
materialConfirmation: Record<string, unknown>
submitText: string
successText: string
postSubmitText: string
adminUserId: number | null
}): Promise<OrderServiceProfileRow> {
const result = await query<OrderServiceProfileRow>(
@@ -110,11 +112,11 @@ export async function upsertOrderServiceProfile(input: {
category_id, name, title, description,
guide_image_json, fields_json, screenshots_json, auto_publish_json,
material_confirmation_json,
submit_text, success_text, status, created_by_admin_user_id
submit_text, success_text, post_submit_text, status, created_by_admin_user_id
) VALUES (
$1, $2, $3, $4,
$5::jsonb, $6::jsonb, $7::jsonb, $8::jsonb, $9::jsonb,
$10, $11, 'draft', $12
$10, $11, $12, 'draft', $13
)
ON CONFLICT (category_id) DO UPDATE SET
name = EXCLUDED.name,
@@ -127,6 +129,7 @@ export async function upsertOrderServiceProfile(input: {
material_confirmation_json = EXCLUDED.material_confirmation_json,
submit_text = EXCLUDED.submit_text,
success_text = EXCLUDED.success_text,
post_submit_text = EXCLUDED.post_submit_text,
current_version_id = CASE
WHEN order_service_profiles.status = 'archived' THEN NULL
ELSE order_service_profiles.current_version_id
@@ -147,6 +150,7 @@ export async function upsertOrderServiceProfile(input: {
JSON.stringify(input.materialConfirmation),
input.submitText,
input.successText,
input.postSubmitText,
input.adminUserId,
],
)
@@ -86,6 +86,14 @@ test('订单服务游戏 ID:标准化为纯数字字符串校验', () => {
assert.equal(normalized.fields[0]?.validation, 'digits')
})
test('订单服务提交后说明:旧配置使用默认文案,新配置支持多行自定义', () => {
assert.equal(config().postSubmitText, '资料提交后如需修改,请联系客服。')
assert.equal(
config({ postSubmitText: '资料提交后不可修改。\n如填写错误,请联系客服。' }).postSubmitText,
'资料提交后不可修改。\n如填写错误,请联系客服。',
)
})
test('订单服务提交确认:旧配置默认展示不可修改与资料错误免责声明', () => {
const normalized = config()
assert.deepEqual(normalized.materialConfirmation, {
@@ -68,6 +68,7 @@ export type OrderServiceProfileConfig = {
materialConfirmation: OrderServiceMaterialConfirmation
submitText: string
successText: string
postSubmitText: string
}
export type OrderServiceProfileSnapshot = {
@@ -96,6 +97,8 @@ export const DEFAULT_ORDER_SERVICE_MATERIAL_CONFIRMATION: OrderServiceMaterialCo
cancelText: '返回检查',
}
export const DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT = '资料提交后如需修改,请联系客服。'
export async function listAdminOrderServiceProfiles() {
const [categories, profiles] = await Promise.all([
listAllWorkCategories(),
@@ -153,6 +156,7 @@ export async function saveAdminOrderServiceProfile(payload: JsonObject = {}) {
materialConfirmation,
submitText: text(payload.submitText, 30) || '提交资料',
successText: text(payload.successText, 80) || '资料已提交,请等待处理',
postSubmitText: text(payload.postSubmitText, 500) || DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT,
adminUserId,
})
return { profile: mapAdminProfile(saved) }
@@ -231,6 +235,7 @@ function mapAdminProfile(row: OrderServiceProfileRow) {
materialConfirmation: normalizeMaterialConfirmation(row.material_confirmation_json),
submitText: row.submit_text,
successText: row.success_text,
postSubmitText: buildProfileConfig(row).postSubmitText,
status: row.status,
currentVersionId: row.current_version_id,
currentVersionNo: row.current_version_no,
@@ -250,6 +255,7 @@ export function buildProfileConfig(row: {
material_confirmation_json: unknown
submit_text: string
success_text: string
post_submit_text: string
}): OrderServiceProfileConfig & { guideImage: Record<string, unknown> } {
return {
name: row.name,
@@ -262,6 +268,7 @@ export function buildProfileConfig(row: {
materialConfirmation: normalizeMaterialConfirmation(row.material_confirmation_json),
submitText: row.submit_text || '提交资料',
successText: row.success_text || '资料已提交,请等待处理',
postSubmitText: text(row.post_submit_text, 500) || DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT,
}
}
@@ -314,6 +321,7 @@ export function normalizeProfileConfig(value: JsonObject): OrderServiceProfileCo
materialConfirmation: normalizeMaterialConfirmation(value.materialConfirmation),
submitText: text(value.submitText, 30) || '提交资料',
successText: text(value.successText, 80) || '资料已提交,请等待处理',
postSubmitText: text(value.postSubmitText, 500) || DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT,
}
}
@@ -33,6 +33,7 @@ import {
} from './work-order-material-link-service.js'
import {
DEFAULT_ORDER_SERVICE_MATERIAL_CONFIRMATION,
DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT,
getOrderServiceProfileSnapshotByVersion,
normalizeProfileConfig,
type OrderServiceField,
@@ -74,6 +75,7 @@ export type OrderServicePublicItem = {
description: string
submitText: string
successText: string
postSubmitText: string
state: string
stateLabel: string
message: string
@@ -371,6 +373,7 @@ async function mapPublicOrderItem(order: WorkOrderRow): Promise<OrderServicePubl
description: profile?.description || '',
submitText: profile?.submitText || '提交资料',
successText: profile?.successText || '资料已提交,请等待处理',
postSubmitText: profile?.postSubmitText || DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT,
state: order.status,
stateLabel: resolveOrderServiceStatusLabel(order.status, state.statusLabel),
message: resolveOrderServiceStatusMessage({
@@ -446,6 +449,7 @@ async function resolveProfileConfig(
materialConfirmation: DEFAULT_ORDER_SERVICE_MATERIAL_CONFIRMATION,
submitText: '提交资料',
successText: '资料已提交,请等待处理',
postSubmitText: DEFAULT_ORDER_SERVICE_POST_SUBMIT_TEXT,
}
}
return null