diff --git a/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue b/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue index a698d322f..3d624ba8c 100644 --- a/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/WITHDRAWAL_SETTING.vue @@ -6,7 +6,7 @@ - ¥ + ¥ @@ -57,12 +57,21 @@ const props = defineProps(["res", "type"]); // handleSubmit(that, name) 通过 that.$refs[name] 取表单实例 const { proxy } = getCurrentInstance(); -const result = ref(""); -// 只做属性合并的成组对象 -const ruleValidate = reactive({}); +const ruleValidate = reactive({ + minPrice: [ + { required: true, message: "请填写最低提现金额", trigger: "blur" }, + { type: "number", min: 0, message: "最低提现金额必须是非负数字", trigger: "change" }, + ], + type: [{ required: true, message: "请选择提现方式", trigger: "change" }], + wechatAppId: [{ + validator: (rule, value, callback) => { + if (formValidate.value.type === "WECHAT" && !value?.trim()) callback(new Error("请填写微信提现应用ID")); + else callback(); + }, + trigger: "blur", + }], +}); const formValidate = ref({}); -// 历史遗留:声明后未在模板使用,原样保留 -const switchTitle = ref("提现审核是否开启"); // 模板 ref 与 data 同名会互相覆盖,改名 formValidateRef 并同步改 script const formValidateRef = ref(null); @@ -83,51 +92,23 @@ function setupSetting() { } }); } +/** 保留字段真实类型,并兼容旧配置中的字符串数字、布尔值和字符串 null。 */ function init() { - result.value = JSON.parse(props.res || "{}"); - Object.keys(result.value).map((item) => { - result.value[item] += ""; - }); - formValidate.value = { ...result.value }; - if (!formValidate.value.withdrawRule) { - formValidate.value.withdrawRule = DEFAULT_WITHDRAW_RULE; - } - Object.keys(formValidate.value).forEach((item) => { - if (item === "minPrice") { - ruleValidate[item] = [ - { - required: true, - message: "请填写必填项", - trigger: "blur", - }, - { - validator: (rule, value, callback) => { - if (Number(value) < 0) { - callback(new Error("不能输入负数!")); - } else { - callback(); - } - }, - trigger: "change", - }, - ]; - } else if (item === "withdrawRule") { - ruleValidate[item] = [ - { - required: false, - trigger: "blur", - }, - ]; - } else { - ruleValidate[item] = [ - { - required: true, - message: "请填写必填项", - trigger: "blur", - }, - ]; - } - }); + const data = JSON.parse(props.res || "{}"); + const values = Object.fromEntries(Object.entries(data).map(([key, value]) => { + const text = typeof value === "string" ? value.trim() : value; + return [key, text === "" || text === "null" ? null : text]; + })); + formValidate.value = { + ...values, + minPrice: values.minPrice == null ? undefined : Number(values.minPrice), + fee: values.fee == null ? null : Number(values.fee), + apply: values.apply === true || values.apply === "true", + type: values.type || "WECHAT", + wechatAppId: values.wechatAppId || "", + wechatAppIdSource: values.wechatAppIdSource || null, + withdrawRule: values.withdrawRule || DEFAULT_WITHDRAW_RULE, + }; } init();