From 2e2290022f8f4cba74760369a764510a312f0ae2 Mon Sep 17 00:00:00 2001 From: Seven Date: Fri, 19 Dec 2025 19:35:43 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E5=8A=9F=E8=83=BD=EF=BC=8C=E7=A1=AE=E4=BF=9D?= =?UTF-8?q?=E5=8F=91=E8=A1=8C=E6=97=A5=E6=9C=9F=E4=B8=8D=E6=97=A9=E4=BA=8E?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=97=A5=E6=9C=9F=EF=BC=8C=E7=94=B3=E8=B4=AD?= =?UTF-8?q?=E6=88=AA=E6=AD=A2=E6=97=A5=E6=9C=9F=E4=B8=8D=E6=97=A9=E4=BA=8E?= =?UTF-8?q?=E5=8F=91=E8=A1=8C=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ui/datetime/index.vue | 13 +++- src/locales/en-US.json | 2 + src/locales/zh-CN.json | 2 + .../issue/issuing-apply/issue-period.vue | 74 ++++++++++++------- 4 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/components/ui/datetime/index.vue b/src/components/ui/datetime/index.vue index b1cc0e2..abebf87 100644 --- a/src/components/ui/datetime/index.vue +++ b/src/components/ui/datetime/index.vue @@ -2,16 +2,23 @@ import type { FieldBindingObject } from "vee-validate"; interface Props extends FieldBindingObject { + datetime: string; label?: string; formatterValue?: (value: string) => string; format?: (value: string) => string; + min?: string; + max?: string; } const props = defineProps(); +const emit = defineEmits<{ + (e: "update:value", value: string): void; +}>(); function handleChange(value: string) { const formattedValue = props.formatterValue ? props.formatterValue(value) : new Date(value).toISOString(); props.onChange(formattedValue); + emit("update:value", formattedValue); } function formatDisplay(value: string) { @@ -24,18 +31,20 @@ function formatDisplay(value: string) { {{ props.label }} - +
{{ formatDisplay(props.value) }}
diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 2af03c5..40f0ccd 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -176,9 +176,11 @@ "categoryRequired": "Type is required", "editionNameRequired": "Edition name is required", "launchDateRequired": "Launch date is required", + "launchDateNotPast": "Launch date cannot be earlier than current date", "perUserLimitRequired": "Per user limit is required", "totalSupplyRequired": "Total supply is required", "subscriptionDeadlineRequired": "Subscription deadline is required", + "deadlineAfterLaunch": "Subscription deadline cannot be earlier than launch date", "unitPriceRequired": "Unit price is required", "dividendRateRequired": "Dividend rate is required" }, diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index 5f1f72e..46b884f 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -176,9 +176,11 @@ "categoryRequired": "产品类型是必填项", "editionNameRequired": "发行期名称是必填项", "launchDateRequired": "发行日期是必填项", + "launchDateNotPast": "发行日期不能小于当前日期", "perUserLimitRequired": "个人申购上限是必填项", "totalSupplyRequired": "发行总量是必填项", "subscriptionDeadlineRequired": "申购截止日期是必填项", + "deadlineAfterLaunch": "申购截止日期不能小于发行日期", "unitPriceRequired": "单价是必填项", "dividendRateRequired": "分红率是必填项" }, diff --git a/src/views/issue/issuing-apply/issue-period.vue b/src/views/issue/issuing-apply/issue-period.vue index 9e5292b..ffd0145 100644 --- a/src/views/issue/issuing-apply/issue-period.vue +++ b/src/views/issue/issuing-apply/issue-period.vue @@ -34,10 +34,23 @@ const schema = toTypedSchema(yup.object({ editions: yup.array().of( yup.object({ editionName: yup.string().required(t("asset.issue.apply.validation.editionNameRequired")), - launchDate: yup.string().required(t("asset.issue.apply.validation.launchDateRequired")), + launchDate: yup.string() + .required(t("asset.issue.apply.validation.launchDateRequired")) + .test("not-past", t("asset.issue.apply.validation.launchDateNotPast"), (value) => { + if (!value) + return true; + return new Date(value) >= new Date(now.value.toDateString()); + }), perUserLimit: yup.string().required(t("asset.issue.apply.validation.perUserLimitRequired")), totalSupply: yup.string().required(t("asset.issue.apply.validation.totalSupplyRequired")), - subscriptionDeadline: yup.string().required(t("asset.issue.apply.validation.subscriptionDeadlineRequired")), + subscriptionDeadline: yup.string() + .required(t("asset.issue.apply.validation.subscriptionDeadlineRequired")) + .test("after-launch", t("asset.issue.apply.validation.deadlineAfterLaunch"), function (value) { + const { launchDate } = this.parent; + if (!value || !launchDate) + return true; + return new Date(value) >= new Date(launchDate); + }), unitPrice: yup.string().required(t("asset.issue.apply.validation.unitPriceRequired")), dividendRate: yup.string().required(t("asset.issue.apply.validation.dividendRateRequired")), }), @@ -47,11 +60,6 @@ const schema = toTypedSchema(yup.object({ function handleSubmit(values: GenericObject) { emit("submit", values.editions); } -function handleChange(event: Event) { - debugger; - const input = event.target as HTMLInputElement; - return new Date(input.value); -}