import { V as ElCol, T as ElCard, a3 as ElDescriptions, a4 as ElDescriptionsItem, h as ElButton, ao as vLoading, w as ElForm, x as ElFormItem, av as ElInputNumber, M as ElSwitch, a0 as ElAlert, U as ElRow, E as ElMessage } from "./element-plus.CkEW9frc.js"; import { Y as YifanMembershipAPI } from "./yifan_membership.CCYhkrJx.js"; import { J as defineComponent, t as onMounted, S as openBlock, _ as createElementBlock, $ as createVNode, a0 as withCtx, a6 as withDirectives, T as createBlock, a9 as createTextVNode, aa as toDisplayString, a1 as createBaseVNode, r as ref, ak as reactive, j as computed } from "./.pnpm.BW3P1y8f.js"; import { _ as _export_sfc } from "./_plugin-vue_export-helper.1tPrXgE0.js"; import "./index.CMd5bD1r.js"; import "./codemirror.CvJAcn2d.js"; const _hoisted_1 = { class: "app-container" }; const _hoisted_2 = { class: "mt-4" }; const _sfc_main = /* @__PURE__ */ defineComponent({ ...{ name: "YifanMembershipUserCenter", inheritAttrs: false }, __name: "index", setup(__props) { const benefitsLoading = ref(false); const detectLoading = ref(false); const levelTextMap = { junior: "初级会员", senior: "高级会员" }; const benefits = reactive({ member_level: "junior", free_rename_quota: 0, daily_detect_remaining: 0, discount_rate: 1 }); const renameForm = reactive({ original_price: 0, use_free_quota: true, free_quota: 0, discount_rate: 1 }); function toNumber(value, fallback = 0) { const num = Number(value); return Number.isNaN(num) ? fallback : num; } function toRate(value, fallback = 1) { const num = toNumber(value, fallback); return Math.min(1, Math.max(0, Number(num.toFixed(2)))); } function toPercent(value) { return `${(toRate(value) * 100).toFixed(2)}%`; } const displayPrice = computed(() => { const originalPrice = Number(toNumber(renameForm.original_price, 0).toFixed(2)); const canUseFree = renameForm.use_free_quota && toNumber(renameForm.free_quota, 0) > 0; const finalPrice = canUseFree ? 0 : Number((originalPrice * toRate(renameForm.discount_rate, 1)).toFixed(2)); return { originalPrice: originalPrice.toFixed(2), finalPrice: finalPrice.toFixed(2), freeTag: canUseFree ? "本次使用免费名额" : "本次未使用免费名额" }; }); async function loadBenefits() { benefitsLoading.value = true; try { const response = await YifanMembershipAPI.getMyBenefits(); const data = response.data.data; benefits.member_level = data.member_level || "junior"; benefits.free_rename_quota = toNumber(data.free_rename_quota, 0); benefits.daily_detect_remaining = toNumber(data.daily_detect_remaining, 0); benefits.discount_rate = toRate(data.discount_rate, 1); renameForm.discount_rate = benefits.discount_rate; renameForm.free_quota = benefits.free_rename_quota; } catch (error) { ElMessage.error((error == null ? void 0 : error.message) || "会员权益加载失败"); } finally { benefitsLoading.value = false; } } async function handleConsumeDailyDetect() { detectLoading.value = true; try { await YifanMembershipAPI.consumeDailyDetect(); await loadBenefits(); } catch (error) { const msg = (error == null ? void 0 : error.message) || "检测次数扣减失败"; if (msg.includes("今日免费检测次数已用完")) { ElMessage.warning("今日免费检测次数已用完,请明日再试或使用付费/会员能力"); } else { ElMessage.error(msg); } } finally { detectLoading.value = false; } } onMounted(() => { loadBenefits(); }); return (_ctx, _cache) => { const _component_el_descriptions_item = ElDescriptionsItem; const _component_el_descriptions = ElDescriptions; const _component_el_button = ElButton; const _component_el_card = ElCard; const _component_el_col = ElCol; const _component_el_input_number = ElInputNumber; const _component_el_form_item = ElFormItem; const _component_el_switch = ElSwitch; const _component_el_form = ElForm; const _component_el_alert = ElAlert; const _component_el_row = ElRow; const _directive_loading = vLoading; return openBlock(), createElementBlock("div", _hoisted_1, [ createVNode(_component_el_row, { gutter: 16 }, { default: withCtx(() => [ createVNode(_component_el_col, { xs: 24, lg: 10 }, { default: withCtx(() => [ withDirectives((openBlock(), createBlock(_component_el_card, null, { header: withCtx(() => [..._cache[4] || (_cache[4] = [ createBaseVNode("div", { class: "card-header" }, "个人中心 - 会员权益", -1) ])]), default: withCtx(() => [ createVNode(_component_el_descriptions, { column: 1, border: "" }, { default: withCtx(() => [ createVNode(_component_el_descriptions_item, { label: "会员等级" }, { default: withCtx(() => [ createTextVNode(toDisplayString(levelTextMap[benefits.member_level] || benefits.member_level), 1) ]), _: 1 }), createVNode(_component_el_descriptions_item, { label: "免费改名名额" }, { default: withCtx(() => [ createTextVNode(toDisplayString(benefits.free_rename_quota), 1) ]), _: 1 }), createVNode(_component_el_descriptions_item, { label: "今日检测剩余次数" }, { default: withCtx(() => [ createTextVNode(toDisplayString(benefits.daily_detect_remaining), 1) ]), _: 1 }), createVNode(_component_el_descriptions_item, { label: "会员折扣" }, { default: withCtx(() => [ createTextVNode(toDisplayString(toPercent(benefits.discount_rate)), 1) ]), _: 1 }) ]), _: 1 }), createBaseVNode("div", _hoisted_2, [ createVNode(_component_el_button, { type: "primary", loading: detectLoading.value, onClick: handleConsumeDailyDetect }, { default: withCtx(() => [..._cache[5] || (_cache[5] = [ createTextVNode(" 使用一次每日检测 ", -1) ])]), _: 1 }, 8, ["loading"]), _cache[6] || (_cache[6] = createBaseVNode("div", { class: "hint-text mt-2" }, " 若提示“今日免费检测次数已用完”,请明日再试或引导用户付费/开通会员。 ", -1)) ]) ]), _: 1 })), [ [_directive_loading, benefitsLoading.value] ]) ]), _: 1 }), createVNode(_component_el_col, { xs: 24, lg: 14 }, { default: withCtx(() => [ createVNode(_component_el_card, null, { header: withCtx(() => [..._cache[7] || (_cache[7] = [ createBaseVNode("div", { class: "card-header" }, "改名下单价格展示(前端)", -1) ])]), default: withCtx(() => [ createVNode(_component_el_form, { model: renameForm, "label-width": "120px", "label-suffix": ":" }, { default: withCtx(() => [ createVNode(_component_el_form_item, { label: "原价 original_price" }, { default: withCtx(() => [ createVNode(_component_el_input_number, { modelValue: renameForm.original_price, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => renameForm.original_price = $event), min: 0, step: 1, precision: 2 }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "是否使用免费名额" }, { default: withCtx(() => [ createVNode(_component_el_switch, { modelValue: renameForm.use_free_quota, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => renameForm.use_free_quota = $event) }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "免费名额剩余" }, { default: withCtx(() => [ createVNode(_component_el_input_number, { modelValue: renameForm.free_quota, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => renameForm.free_quota = $event), min: 0, step: 1, precision: 0 }, null, 8, ["modelValue"]) ]), _: 1 }), createVNode(_component_el_form_item, { label: "会员折扣" }, { default: withCtx(() => [ createVNode(_component_el_input_number, { modelValue: renameForm.discount_rate, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => renameForm.discount_rate = $event), min: 0, max: 1, step: 0.01, precision: 2 }, null, 8, ["modelValue"]) ]), _: 1 }) ]), _: 1 }, 8, ["model"]), createVNode(_component_el_alert, { type: "info", closable: false, class: "mb-3" }, { title: withCtx(() => [ createTextVNode(" 展示建议:原价 " + toDisplayString(displayPrice.value.originalPrice) + " 元,折后价 " + toDisplayString(displayPrice.value.finalPrice) + " 元, " + toDisplayString(displayPrice.value.freeTag), 1) ]), _: 1 }), _cache[8] || (_cache[8] = createBaseVNode("div", { class: "hint-text" }, " 下单请求参数请携带 `original_price`,后端会自动优先扣免费名额,不足时按会员折扣计算并写消费记录。 ", -1)) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }) ]); }; } }); const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7b627a0e"]]); export { index as default };