feat: 打手支持昵称登录,物品规则标识唯一校验

- 昵称全局唯一(迁移 016 唯一索引 + 注册校验),存量空昵称自动补账号名
- 登录解析链扩展为 账号/手机号/昵称,均可加密码登录
- 登录页提示更新为「手机号 / 昵称 / 账号」,注册页提示昵称可作登录账号
- 新建物品规则时校验规则标识唯一:已存在则拒绝(409),编辑不受影响
- 前端规则表单增加规则标识重复的即时校验
This commit is contained in:
yml2213
2026-08-14 16:16:49 +08:00
parent 88b205f4fd
commit 6a17113374
7 changed files with 82 additions and 11 deletions
@@ -102,6 +102,7 @@ export default function ProductRulesPanel() {
})
async function saveRule(values: {
ruleId?: number
ruleKey: string
provider?: string
platform?: string
@@ -124,7 +125,10 @@ export default function ProductRulesPanel() {
autoCreate?: boolean
}) {
try {
await saveAdminWorkProductRule(values)
await saveAdminWorkProductRule({
...values,
ruleId: editingRule?.ruleId,
})
message.success(editingRule ? '物品规则已更新' : '物品规则已创建')
resetRuleForm()
await Promise.all([
@@ -346,7 +350,23 @@ export default function ProductRulesPanel() {
<Form.Item
label="规则标识"
name="ruleKey"
rules={[{ required: true, message: '请输入规则标识' }]}
rules={[
{ required: true, message: '请输入规则标识' },
{
validator: (_, value) => {
const key = String(value || '').trim()
if (
!editingRule &&
(rulesQuery.data?.data.items || []).some(
(rule) => rule.ruleKey === key,
)
) {
return Promise.reject(new Error('规则标识已存在,请更换'))
}
return Promise.resolve()
},
},
]}
>
<Input placeholder="skin-training" disabled={Boolean(editingRule)} />
</Form.Item>