diff --git a/controller/user.go b/controller/user.go index 2797325..ff78e09 100644 --- a/controller/user.go +++ b/controller/user.go @@ -843,12 +843,19 @@ func CreateUser(c *gin.Context) { Password: user.Password, DisplayName: user.DisplayName, Role: user.Role, // 保持管理员设置的角色 + Email: user.Email, + Quota: user.Quota, + Group: user.Group, + AffCode: user.AffCode, } if err := cleanUser.Insert(0); err != nil { common.ApiError(c, err) return } + // 同步用户到海外节点(异步执行,不阻塞创建流程) + region_sync.PushUserCreateToSlave(&cleanUser) + c.JSON(http.StatusOK, gin.H{ "success": true, "message": "", diff --git a/web/src/i18n/locales/en.json b/web/src/i18n/locales/en.json index 071a831..ed3b03e 100644 --- a/web/src/i18n/locales/en.json +++ b/web/src/i18n/locales/en.json @@ -3133,7 +3133,81 @@ "?? JSON": "Apply JSON", "??? {{count}} ?????{{sample}}": "Will generate {{count}} rows. Sample: {{sample}}", "JSON ????": "JSON format error", - "Key": "Key" + "Key": "Key", + "最终价格": "Final price", + "保留手动行": "Preserve manual rows", + "全部替换": "Replace all", + "添加倍率项": "Add ratio item", + "候选值": "Candidate value", + "默认值": "Default value", + "生成价格表": "Generate pricing table", + "应用生成结果": "Apply generated rows", + "每 1M tokens": "per 1M tokens", + "价格({{unit}})": "Price ({{unit}})", + "展示价格({{unit}})": "Display price ({{unit}})", + "保存价格 USD({{unit}})": "Saved price USD ({{unit}})", + "保存价格 USD": "Saved price USD", + "按完成 tokens 重算": "Settle by completed tokens", + "固定按次": "Fixed per call", + "旧日志字段": "Legacy log field", + "价格计算": "Price calculation", + "基础单价": "Base unit price", + "实际单价": "Effective unit price", + "实际用量": "Actual usage", + "计算扣费": "Calculated cost", + "命中维度": "Matched dimensions", + "结算信息": "Settlement", + "日志扣费": "Logged cost", + "预扣": "Pre-consumed", + "实际": "Actual", + "等待实际 tokens": "Waiting for actual tokens", + "等待完成后重算": "Waiting for settlement", + "单次计费": "Single call", + "待结算": "Pending settlement", + "已结算": "Settled", + "已退还": "Refunded", + "补扣": "Additional charge", + "退还": "Refund", + "任务账单状态": "Task billing status", + "预扣金额": "Pre-consumed amount", + "实际消费": "Actual cost", + "结算差额": "Settlement delta", + "退还金额": "Refund amount", + "基础信息": "Basic info", + "计费信息": "Billing info", + "矩阵计费": "Matrix billing", + "请求上下文": "Request context", + "状态与原因": "Status and reason", + "更多信息": "More info", + "原始字段": "Raw fields", + "时间": "Time", + "模型": "Model", + "令牌": "Token", + "分组": "Group", + "用户": "User", + "渠道": "Channel", + "任务ID": "Task ID", + "请求路径": "Request path", + "花费": "Cost", + "模型价格": "Model price", + "Token 单价 USD": "Token unit price USD", + "分组倍率": "Group ratio", + "用户分组倍率": "User group ratio", + "计费模式": "Billing mode", + "计费单位": "Billing unit", + "计费阶段": "Billing phase", + "总 Tokens": "Total tokens", + "命中价格 USD": "Matched price USD", + "命中模式": "Matched mode", + "请求转换": "Request conversion", + "请求并计费模型": "Requested and billed model", + "实际模型": "Actual model", + "原因": "Reason", + "拦截原因": "Reject reason", + "Other JSON": "Other JSON", + "基础价格是所有倍率计算的起点,当前单位为 {{unitLabel}}。最终价格 = 基础价格 × 各维度倍率。": "The base price is the starting point for all ratio calculations. Current unit: {{unitLabel}}. Final price = base price × each dimension ratio.", + "当前按 {{symbol}} 展示和输入,应用时会按汇率换算为 USD 保存到 table[].price。当前输入 {{symbol}}{{displayPrice}} = ${{usdPrice}}。": "Values are displayed and entered in {{symbol}}. They will be converted to USD and saved in table[].price when applied. Current input {{symbol}}{{displayPrice}} = ${{usdPrice}}.", + "线性倍率项 {{linearCount}} 项,最终展开 {{expandedCount}} 行。任一维度没有候选值时不会生成结果。预览最多展示前 50 行。": "{{linearCount}} linear ratio items, expanding to {{expandedCount}} rows. No rows are generated if any dimension has no candidate values. Preview shows up to 50 rows." }, "邮箱后缀": "Email Suffix", "邮箱后缀必须以 @ 开头": "Email suffix must start with @", diff --git a/web/src/i18n/locales/zh-CN.json b/web/src/i18n/locales/zh-CN.json index 1cf211d..f082d8e 100644 --- a/web/src/i18n/locales/zh-CN.json +++ b/web/src/i18n/locales/zh-CN.json @@ -3104,7 +3104,81 @@ "?? JSON": "?? JSON", "??? {{count}} ?????{{sample}}": "??? {{count}} ?????{{sample}}", "JSON ????": "JSON ????", - "Key": "Key" + "Key": "Key", + "最终价格": "最终价格", + "保留手动行": "保留手动行", + "全部替换": "全部替换", + "添加倍率项": "添加倍率项", + "候选值": "候选值", + "默认值": "默认值", + "生成价格表": "生成价格表", + "应用生成结果": "应用生成结果", + "每 1M tokens": "每 1M tokens", + "价格({{unit}})": "价格({{unit}})", + "展示价格({{unit}})": "展示价格({{unit}})", + "保存价格 USD({{unit}})": "保存价格 USD({{unit}})", + "保存价格 USD": "保存价格 USD", + "按完成 tokens 重算": "按完成 tokens 重算", + "固定按次": "固定按次", + "旧日志字段": "旧日志字段", + "价格计算": "价格计算", + "基础单价": "基础单价", + "实际单价": "实际单价", + "实际用量": "实际用量", + "计算扣费": "计算扣费", + "命中维度": "命中维度", + "结算信息": "结算信息", + "日志扣费": "日志扣费", + "预扣": "预扣", + "实际": "实际", + "等待实际 tokens": "等待实际 tokens", + "等待完成后重算": "等待完成后重算", + "单次计费": "单次计费", + "待结算": "待结算", + "已结算": "已结算", + "已退还": "已退还", + "补扣": "补扣", + "退还": "退还", + "任务账单状态": "任务账单状态", + "预扣金额": "预扣金额", + "实际消费": "实际消费", + "结算差额": "结算差额", + "退还金额": "退还金额", + "基础信息": "基础信息", + "计费信息": "计费信息", + "矩阵计费": "矩阵计费", + "请求上下文": "请求上下文", + "状态与原因": "状态与原因", + "更多信息": "更多信息", + "原始字段": "原始字段", + "时间": "时间", + "模型": "模型", + "令牌": "令牌", + "分组": "分组", + "用户": "用户", + "渠道": "渠道", + "任务ID": "任务ID", + "请求路径": "请求路径", + "花费": "花费", + "模型价格": "模型价格", + "Token 单价 USD": "Token 单价 USD", + "分组倍率": "分组倍率", + "用户分组倍率": "用户分组倍率", + "计费模式": "计费模式", + "计费单位": "计费单位", + "计费阶段": "计费阶段", + "总 Tokens": "总 Tokens", + "命中价格 USD": "命中价格 USD", + "命中模式": "命中模式", + "请求转换": "请求转换", + "请求并计费模型": "请求并计费模型", + "实际模型": "实际模型", + "原因": "原因", + "拦截原因": "拦截原因", + "Other JSON": "Other JSON", + "基础价格是所有倍率计算的起点,当前单位为 {{unitLabel}}。最终价格 = 基础价格 × 各维度倍率。": "基础价格是所有倍率计算的起点,当前单位为 {{unitLabel}}。最终价格 = 基础价格 × 各维度倍率。", + "当前按 {{symbol}} 展示和输入,应用时会按汇率换算为 USD 保存到 table[].price。当前输入 {{symbol}}{{displayPrice}} = ${{usdPrice}}。": "当前按 {{symbol}} 展示和输入,应用时会按汇率换算为 USD 保存到 table[].price。当前输入 {{symbol}}{{displayPrice}} = ${{usdPrice}}。", + "线性倍率项 {{linearCount}} 项,最终展开 {{expandedCount}} 行。任一维度没有候选值时不会生成结果。预览最多展示前 50 行。": "线性倍率项 {{linearCount}} 项,最终展开 {{expandedCount}} 行。任一维度没有候选值时不会生成结果。预览最多展示前 50 行。" }, "邮箱后缀": "邮箱后缀", "邮箱后缀必须以 @ 开头": "邮箱后缀必须以 @ 开头",