style(consignment): 联系方式与游戏凭据分区移到规格字段之后
This commit is contained in:
@@ -1116,428 +1116,6 @@ export default function ConsignmentConfigPanel() {
|
|||||||
<div className="order-service-section-head">
|
<div className="order-service-section-head">
|
||||||
<ConsignmentSectionTitle
|
<ConsignmentSectionTitle
|
||||||
index="03"
|
index="03"
|
||||||
title="价格配置"
|
|
||||||
description="按接单模板价打折,或按模板价固定下调;没有模板价一律阻止发布"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<Alert
|
|
||||||
type="info"
|
|
||||||
showIcon
|
|
||||||
message="寄售价始终基于接单模板价计算;该规格没有模板价时,打手端会直接阻止发布。"
|
|
||||||
style={{ marginBottom: 12 }}
|
|
||||||
/>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="价格类型"
|
|
||||||
name={['pricing', 'priceType']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Radio.Group
|
|
||||||
optionType="button"
|
|
||||||
buttonStyle="solid"
|
|
||||||
options={[
|
|
||||||
{ value: 'template_discount', label: '接单模板价打折' },
|
|
||||||
{ value: 'template_minus', label: '模板价固定下调' },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
{priceType === 'template_minus' ? (
|
|
||||||
<Form.Item
|
|
||||||
label="固定下调(元)"
|
|
||||||
name={['pricing', 'minusYuan']}
|
|
||||||
rules={[{ type: 'number', min: 0 }]}
|
|
||||||
extra="售价 = 接单模板价 − 固定下调金额;下调后不足 1 元会被拒绝"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={2}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonBefore="¥"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : (
|
|
||||||
<Form.Item
|
|
||||||
label="模板折扣"
|
|
||||||
name={['pricing', 'discount']}
|
|
||||||
rules={[{ type: 'number', min: 0.1, max: 10 }]}
|
|
||||||
extra="例如 9.5 折 = 接单模板价 × 95%"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0.1}
|
|
||||||
max={10}
|
|
||||||
step={0.1}
|
|
||||||
precision={1}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonAfter="折"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
)}
|
|
||||||
<Form.Item
|
|
||||||
label="允许打手改价"
|
|
||||||
name={['pricing', 'allowWorkerPrice']}
|
|
||||||
valuePropName="checked"
|
|
||||||
extra="打手只能按系统建议价往下调"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="允许" unCheckedChildren="不允许" />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="最低售价(元)"
|
|
||||||
name={['pricing', 'minPriceYuan']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={2}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonBefore="¥"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="04"
|
|
||||||
title="履约保证金"
|
|
||||||
description="开启后按配置冻结;关闭时使用平台统一发布押金"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="开启保证金"
|
|
||||||
name={['deposit', 'enabled']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
||||||
</Form.Item>
|
|
||||||
{depositEnabled ? (
|
|
||||||
<Form.Item
|
|
||||||
label="保证金模式"
|
|
||||||
name={['deposit', 'mode']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Select
|
|
||||||
options={[
|
|
||||||
{ value: 'fixed', label: '固定金额' },
|
|
||||||
{ value: 'per_quantity', label: '按数量' },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
{depositEnabled && depositMode === 'fixed' ? (
|
|
||||||
<Form.Item
|
|
||||||
label="固定金额(元)"
|
|
||||||
name={['deposit', 'fixedAmountYuan']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={2}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonBefore="¥"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
{depositEnabled && depositMode === 'per_quantity' ? (
|
|
||||||
<Form.Item
|
|
||||||
label="每件金额(元)"
|
|
||||||
name={['deposit', 'unitAmountYuan']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={2}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonBefore="¥"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="05"
|
|
||||||
title="服务费"
|
|
||||||
description="按成交金额比例或固定金额收取"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="开启服务费"
|
|
||||||
name={['serviceFee', 'enabled']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
||||||
</Form.Item>
|
|
||||||
{serviceFeeEnabled ? (
|
|
||||||
<Form.Item
|
|
||||||
label="服务费模式"
|
|
||||||
name={['serviceFee', 'mode']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Select
|
|
||||||
options={[
|
|
||||||
{ value: 'percent', label: '按比例 %' },
|
|
||||||
{ value: 'fixed', label: '固定金额' },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
{serviceFeeEnabled && serviceFeeMode === 'percent' ? (
|
|
||||||
<Form.Item
|
|
||||||
label="比例(%)"
|
|
||||||
name={['serviceFee', 'percent']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber min={0} max={100} precision={2} style={{ width: '100%' }} />
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
{serviceFeeEnabled && serviceFeeMode === 'fixed' ? (
|
|
||||||
<Form.Item
|
|
||||||
label="固定金额(元)"
|
|
||||||
name={['serviceFee', 'amountYuan']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={2}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonBefore="¥"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="06"
|
|
||||||
title="库存数量限制"
|
|
||||||
description="限制单个打手在售与待审核的寄卖数量"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="开启单人寄售上限"
|
|
||||||
name={['inventoryLimit', 'enabled']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
||||||
</Form.Item>
|
|
||||||
{inventoryLimitEnabled ? (
|
|
||||||
<Form.Item
|
|
||||||
label="最多在售数量"
|
|
||||||
name={['inventoryLimit', 'maxActiveQuantity']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={0}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonAfter="件"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="07"
|
|
||||||
title="匹配设置"
|
|
||||||
description="匹配模式决定新单是否进入内部库存匹配队列"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="匹配模式"
|
|
||||||
name={['matching', 'mode']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Select
|
|
||||||
options={[
|
|
||||||
{ value: 'off', label: '关闭匹配' },
|
|
||||||
{ value: 'manual', label: '手动匹配' },
|
|
||||||
{ value: 'auto', label: '自动匹配' },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
{matchingMode !== 'off' ? (
|
|
||||||
<>
|
|
||||||
<Form.Item
|
|
||||||
label="仅精确匹配"
|
|
||||||
name={['matching', 'exactOnly']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="仅精确" unCheckedChildren="允许高配" />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="低价订单优先"
|
|
||||||
name={['matching', 'preferLowReward']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="优先" unCheckedChildren="不优先" />
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="内部匹配等待(分钟)"
|
|
||||||
name={['internalMatch', 'delayMinutes']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
precision={0}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonAfter="分钟"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="超时发回大厅"
|
|
||||||
name={['internalMatch', 'fallbackToHall']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="是" unCheckedChildren="否" />
|
|
||||||
</Form.Item>
|
|
||||||
</>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
{matchingMode === 'off' ? (
|
|
||||||
<Alert
|
|
||||||
type="warning"
|
|
||||||
showIcon
|
|
||||||
style={{ marginTop: 12 }}
|
|
||||||
message="关闭匹配后:新单直接进入接单大厅,不等待内部库存,也不会自动匹配。"
|
|
||||||
/>
|
|
||||||
) : null}
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="08"
|
|
||||||
title="超时设置"
|
|
||||||
description="匹配成功进入代练中后的时限与超时处置动作"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="代练超时(小时)"
|
|
||||||
name={['timeout', 'hours']}
|
|
||||||
rules={[{ type: 'number', min: 0 }]}
|
|
||||||
extra="默认 0.5 小时;到点后按下方超时动作处置"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
step={0.5}
|
|
||||||
precision={1}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonAfter="小时"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="超时动作"
|
|
||||||
name={['timeout', 'policy']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Select
|
|
||||||
options={[
|
|
||||||
{ value: 'reopen', label: '退回大厅(退还押金)' },
|
|
||||||
{ value: 'cancel_release', label: '取消并释放押金' },
|
|
||||||
{ value: 'cancel_deduct', label: '取消并扣除押金' },
|
|
||||||
{ value: 'rematch_release', label: '重新匹配并退还押金' },
|
|
||||||
{ value: 'rematch_deduct', label: '重新匹配并扣除押金' },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</div>
|
|
||||||
<Alert
|
|
||||||
type="info"
|
|
||||||
showIcon
|
|
||||||
style={{ marginTop: 12 }}
|
|
||||||
message="重新匹配:订单回到内部匹配池,并排除原卖家与原库存,避免同一卖家立刻接回同一单。"
|
|
||||||
/>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="09"
|
|
||||||
title="降价提示"
|
|
||||||
description="寄卖长时间未售出时,在后台给出建议售价(仅提示,不自动改价)"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div style={gridStyle}>
|
|
||||||
<Form.Item
|
|
||||||
label="开启降价提示"
|
|
||||||
name={['priceDrop', 'enabled']}
|
|
||||||
valuePropName="checked"
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
|
||||||
</Form.Item>
|
|
||||||
{priceDropEnabled ? (
|
|
||||||
<>
|
|
||||||
<Form.Item
|
|
||||||
label="未售出时长(小时)"
|
|
||||||
name={['priceDrop', 'hours']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={1}
|
|
||||||
precision={0}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonAfter="小时"
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label="降幅模式"
|
|
||||||
name={['priceDrop', 'mode']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<Select
|
|
||||||
options={[
|
|
||||||
{ value: 'percent', label: '按比例 %' },
|
|
||||||
{ value: 'fixed', label: '固定金额' },
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
<Form.Item
|
|
||||||
label={priceDropMode === 'fixed' ? '下调金额(元)' : '下调比例(%)'}
|
|
||||||
name={['priceDrop', 'value']}
|
|
||||||
style={{ marginBottom: 0 }}
|
|
||||||
>
|
|
||||||
<InputNumber
|
|
||||||
min={0}
|
|
||||||
max={priceDropMode === 'fixed' ? undefined : 100}
|
|
||||||
precision={priceDropMode === 'fixed' ? 2 : 0}
|
|
||||||
style={{ width: '100%' }}
|
|
||||||
addonBefore={priceDropMode === 'fixed' ? '¥' : undefined}
|
|
||||||
addonAfter={priceDropMode === 'fixed' ? undefined : '%'}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
</>
|
|
||||||
) : null}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section className="order-service-section">
|
|
||||||
<div className="order-service-section-head">
|
|
||||||
<ConsignmentSectionTitle
|
|
||||||
index="10"
|
|
||||||
title="联系方式与游戏凭据"
|
title="联系方式与游戏凭据"
|
||||||
description="打手发布页按这里配置的字段动态渲染;字段为空时该模块不显示"
|
description="打手发布页按这里配置的字段动态渲染;字段为空时该模块不显示"
|
||||||
/>
|
/>
|
||||||
@@ -1668,6 +1246,427 @@ export default function ConsignmentConfigPanel() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</section>
|
</section>
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="04"
|
||||||
|
title="价格配置"
|
||||||
|
description="按接单模板价打折,或按模板价固定下调;没有模板价一律阻止发布"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<Alert
|
||||||
|
type="info"
|
||||||
|
showIcon
|
||||||
|
message="寄售价始终基于接单模板价计算;该规格没有模板价时,打手端会直接阻止发布。"
|
||||||
|
style={{ marginBottom: 12 }}
|
||||||
|
/>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="价格类型"
|
||||||
|
name={['pricing', 'priceType']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Radio.Group
|
||||||
|
optionType="button"
|
||||||
|
buttonStyle="solid"
|
||||||
|
options={[
|
||||||
|
{ value: 'template_discount', label: '接单模板价打折' },
|
||||||
|
{ value: 'template_minus', label: '模板价固定下调' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
{priceType === 'template_minus' ? (
|
||||||
|
<Form.Item
|
||||||
|
label="固定下调(元)"
|
||||||
|
name={['pricing', 'minusYuan']}
|
||||||
|
rules={[{ type: 'number', min: 0 }]}
|
||||||
|
extra="售价 = 接单模板价 − 固定下调金额;下调后不足 1 元会被拒绝"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={2}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonBefore="¥"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : (
|
||||||
|
<Form.Item
|
||||||
|
label="模板折扣"
|
||||||
|
name={['pricing', 'discount']}
|
||||||
|
rules={[{ type: 'number', min: 0.1, max: 10 }]}
|
||||||
|
extra="例如 9.5 折 = 接单模板价 × 95%"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0.1}
|
||||||
|
max={10}
|
||||||
|
step={0.1}
|
||||||
|
precision={1}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonAfter="折"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
)}
|
||||||
|
<Form.Item
|
||||||
|
label="允许打手改价"
|
||||||
|
name={['pricing', 'allowWorkerPrice']}
|
||||||
|
valuePropName="checked"
|
||||||
|
extra="打手只能按系统建议价往下调"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="允许" unCheckedChildren="不允许" />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="最低售价(元)"
|
||||||
|
name={['pricing', 'minPriceYuan']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={2}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonBefore="¥"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="05"
|
||||||
|
title="履约保证金"
|
||||||
|
description="开启后按配置冻结;关闭时使用平台统一发布押金"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="开启保证金"
|
||||||
|
name={['deposit', 'enabled']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
||||||
|
</Form.Item>
|
||||||
|
{depositEnabled ? (
|
||||||
|
<Form.Item
|
||||||
|
label="保证金模式"
|
||||||
|
name={['deposit', 'mode']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
options={[
|
||||||
|
{ value: 'fixed', label: '固定金额' },
|
||||||
|
{ value: 'per_quantity', label: '按数量' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
{depositEnabled && depositMode === 'fixed' ? (
|
||||||
|
<Form.Item
|
||||||
|
label="固定金额(元)"
|
||||||
|
name={['deposit', 'fixedAmountYuan']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={2}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonBefore="¥"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
{depositEnabled && depositMode === 'per_quantity' ? (
|
||||||
|
<Form.Item
|
||||||
|
label="每件金额(元)"
|
||||||
|
name={['deposit', 'unitAmountYuan']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={2}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonBefore="¥"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="06"
|
||||||
|
title="服务费"
|
||||||
|
description="按成交金额比例或固定金额收取"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="开启服务费"
|
||||||
|
name={['serviceFee', 'enabled']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
||||||
|
</Form.Item>
|
||||||
|
{serviceFeeEnabled ? (
|
||||||
|
<Form.Item
|
||||||
|
label="服务费模式"
|
||||||
|
name={['serviceFee', 'mode']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
options={[
|
||||||
|
{ value: 'percent', label: '按比例 %' },
|
||||||
|
{ value: 'fixed', label: '固定金额' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
{serviceFeeEnabled && serviceFeeMode === 'percent' ? (
|
||||||
|
<Form.Item
|
||||||
|
label="比例(%)"
|
||||||
|
name={['serviceFee', 'percent']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber min={0} max={100} precision={2} style={{ width: '100%' }} />
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
{serviceFeeEnabled && serviceFeeMode === 'fixed' ? (
|
||||||
|
<Form.Item
|
||||||
|
label="固定金额(元)"
|
||||||
|
name={['serviceFee', 'amountYuan']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={2}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonBefore="¥"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="07"
|
||||||
|
title="库存数量限制"
|
||||||
|
description="限制单个打手在售与待审核的寄卖数量"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="开启单人寄售上限"
|
||||||
|
name={['inventoryLimit', 'enabled']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
||||||
|
</Form.Item>
|
||||||
|
{inventoryLimitEnabled ? (
|
||||||
|
<Form.Item
|
||||||
|
label="最多在售数量"
|
||||||
|
name={['inventoryLimit', 'maxActiveQuantity']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={0}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonAfter="件"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="08"
|
||||||
|
title="匹配设置"
|
||||||
|
description="匹配模式决定新单是否进入内部库存匹配队列"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="匹配模式"
|
||||||
|
name={['matching', 'mode']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
options={[
|
||||||
|
{ value: 'off', label: '关闭匹配' },
|
||||||
|
{ value: 'manual', label: '手动匹配' },
|
||||||
|
{ value: 'auto', label: '自动匹配' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
{matchingMode !== 'off' ? (
|
||||||
|
<>
|
||||||
|
<Form.Item
|
||||||
|
label="仅精确匹配"
|
||||||
|
name={['matching', 'exactOnly']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="仅精确" unCheckedChildren="允许高配" />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="低价订单优先"
|
||||||
|
name={['matching', 'preferLowReward']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="优先" unCheckedChildren="不优先" />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="内部匹配等待(分钟)"
|
||||||
|
name={['internalMatch', 'delayMinutes']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
precision={0}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonAfter="分钟"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="超时发回大厅"
|
||||||
|
name={['internalMatch', 'fallbackToHall']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="是" unCheckedChildren="否" />
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
{matchingMode === 'off' ? (
|
||||||
|
<Alert
|
||||||
|
type="warning"
|
||||||
|
showIcon
|
||||||
|
style={{ marginTop: 12 }}
|
||||||
|
message="关闭匹配后:新单直接进入接单大厅,不等待内部库存,也不会自动匹配。"
|
||||||
|
/>
|
||||||
|
) : null}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="09"
|
||||||
|
title="超时设置"
|
||||||
|
description="匹配成功进入代练中后的时限与超时处置动作"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="代练超时(小时)"
|
||||||
|
name={['timeout', 'hours']}
|
||||||
|
rules={[{ type: 'number', min: 0 }]}
|
||||||
|
extra="默认 0.5 小时;到点后按下方超时动作处置"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
step={0.5}
|
||||||
|
precision={1}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonAfter="小时"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="超时动作"
|
||||||
|
name={['timeout', 'policy']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
options={[
|
||||||
|
{ value: 'reopen', label: '退回大厅(退还押金)' },
|
||||||
|
{ value: 'cancel_release', label: '取消并释放押金' },
|
||||||
|
{ value: 'cancel_deduct', label: '取消并扣除押金' },
|
||||||
|
{ value: 'rematch_release', label: '重新匹配并退还押金' },
|
||||||
|
{ value: 'rematch_deduct', label: '重新匹配并扣除押金' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</div>
|
||||||
|
<Alert
|
||||||
|
type="info"
|
||||||
|
showIcon
|
||||||
|
style={{ marginTop: 12 }}
|
||||||
|
message="重新匹配:订单回到内部匹配池,并排除原卖家与原库存,避免同一卖家立刻接回同一单。"
|
||||||
|
/>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section className="order-service-section">
|
||||||
|
<div className="order-service-section-head">
|
||||||
|
<ConsignmentSectionTitle
|
||||||
|
index="10"
|
||||||
|
title="降价提示"
|
||||||
|
description="寄卖长时间未售出时,在后台给出建议售价(仅提示,不自动改价)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div style={gridStyle}>
|
||||||
|
<Form.Item
|
||||||
|
label="开启降价提示"
|
||||||
|
name={['priceDrop', 'enabled']}
|
||||||
|
valuePropName="checked"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
|
||||||
|
</Form.Item>
|
||||||
|
{priceDropEnabled ? (
|
||||||
|
<>
|
||||||
|
<Form.Item
|
||||||
|
label="未售出时长(小时)"
|
||||||
|
name={['priceDrop', 'hours']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={1}
|
||||||
|
precision={0}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonAfter="小时"
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="降幅模式"
|
||||||
|
name={['priceDrop', 'mode']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
options={[
|
||||||
|
{ value: 'percent', label: '按比例 %' },
|
||||||
|
{ value: 'fixed', label: '固定金额' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label={priceDropMode === 'fixed' ? '下调金额(元)' : '下调比例(%)'}
|
||||||
|
name={['priceDrop', 'value']}
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
>
|
||||||
|
<InputNumber
|
||||||
|
min={0}
|
||||||
|
max={priceDropMode === 'fixed' ? undefined : 100}
|
||||||
|
precision={priceDropMode === 'fixed' ? 2 : 0}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
addonBefore={priceDropMode === 'fixed' ? '¥' : undefined}
|
||||||
|
addonAfter={priceDropMode === 'fixed' ? undefined : '%'}
|
||||||
|
/>
|
||||||
|
</Form.Item>
|
||||||
|
</>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<div className="order-service-save-bar">
|
<div className="order-service-save-bar">
|
||||||
<Text type="secondary">保存只更新草稿,发布后才会影响新工单。</Text>
|
<Text type="secondary">保存只更新草稿,发布后才会影响新工单。</Text>
|
||||||
|
|||||||
@@ -87,6 +87,11 @@ test('寄卖配置面板:订单服务风格分类树、独立分区与价格
|
|||||||
assert.ok(panel.includes(label), `寄卖配置面板缺少「${label}」`)
|
assert.ok(panel.includes(label), `寄卖配置面板缺少「${label}」`)
|
||||||
}
|
}
|
||||||
assert.ok(panel.includes('order-service-category-group'), '分类必须按订单服务风格分组')
|
assert.ok(panel.includes('order-service-category-group'), '分类必须按订单服务风格分组')
|
||||||
|
assert.ok(
|
||||||
|
panel.indexOf('title="规格字段"') < panel.indexOf('title="联系方式与游戏凭据"') &&
|
||||||
|
panel.indexOf('title="联系方式与游戏凭据"') < panel.indexOf('title="价格配置"'),
|
||||||
|
'联系方式与游戏凭据必须紧跟在规格字段之后、价格配置之前',
|
||||||
|
)
|
||||||
assert.ok(panel.includes('order-service-subcategory-list'), '二级分类必须缩进展示')
|
assert.ok(panel.includes('order-service-subcategory-list'), '二级分类必须缩进展示')
|
||||||
assert.ok(panel.includes('resolveInheritedProfileStatus'), '子分类必须展示继承父级状态')
|
assert.ok(panel.includes('resolveInheritedProfileStatus'), '子分类必须展示继承父级状态')
|
||||||
assert.ok(panel.includes('order-service-save-bar'), '底部必须使用订单服务保存栏')
|
assert.ok(panel.includes('order-service-save-bar'), '底部必须使用订单服务保存栏')
|
||||||
|
|||||||
Reference in New Issue
Block a user