更新操作按钮为菜单栏 & 调整页面表格顺序

This commit is contained in:
Eamon
2026-04-11 17:07:03 +08:00
parent ed95f0520d
commit 4307efae98
22 changed files with 675 additions and 395 deletions

View File

@@ -43,16 +43,17 @@ const schema = z.object({
.refine(
v => !Number.isNaN(Number(v)) && Number(v) > 0,
"请输入有效的正数单价",
),
)
.refine(val => /^\d+(\.\d{1,2})?$/.test(val), "价格最多只能保留两位小数"),
discount_id: z.string().optional(),
price_min: z
.string()
.optional()
.or(z.literal(""))
.min(1, "请输入最低价格")
.refine(
v => !v || (!Number.isNaN(Number(v)) && Number(v) > 0),
v => !Number.isNaN(Number(v)) && Number(v) > 0,
"请输入有效的正数价格",
),
)
.refine(val => /^\d+(\.\d{1,2})?$/.test(val), "价格最多只能保留两位小数"),
})
export function CreateProductSku(props: {
@@ -159,12 +160,25 @@ export function CreateProductSku(props: {
name="price"
render={({ field, fieldState }) => (
<Field>
<FieldLabel htmlFor="sku-create-price"></FieldLabel>
<FieldLabel htmlFor="sku-update-price"></FieldLabel>
<Input
id="sku-create-price"
id="sku-update-price"
placeholder="请输入单价"
{...field}
aria-invalid={fieldState.invalid}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
let value = e.target.value
value = value.replace(/[^\d.]/g, "")
const dotCount = (value.match(/\./g) || []).length
if (dotCount > 1) {
value = value.slice(0, value.lastIndexOf("."))
}
if (value.includes(".")) {
const [int, dec] = value.split(".")
value = `${int}.${dec.slice(0, 2)}`
}
field.onChange(value)
}}
/>
{fieldState.invalid && (
<FieldError errors={[fieldState.error]} />
@@ -172,7 +186,6 @@ export function CreateProductSku(props: {
</Field>
)}
/>
<Controller
control={form.control}
name="price_min"
@@ -181,9 +194,22 @@ export function CreateProductSku(props: {
<FieldLabel htmlFor="sku-create-price"></FieldLabel>
<Input
id="sku-create-price"
placeholder="请输入单价"
placeholder="请输入最低价格"
{...field}
aria-invalid={fieldState.invalid}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
let value = e.target.value
value = value.replace(/[^\d.]/g, "")
const dotCount = (value.match(/\./g) || []).length
if (dotCount > 1) {
value = value.slice(0, value.lastIndexOf("."))
}
if (value.includes(".")) {
const [int, dec] = value.split(".")
value = `${int}.${dec.slice(0, 2)}`
}
field.onChange(value)
}}
/>
{fieldState.invalid && (
<FieldError errors={[fieldState.error]} />