upload project source code

This commit is contained in:
2026-04-30 18:49:43 +08:00
commit 9b394ba682
2277 changed files with 660945 additions and 0 deletions

View File

@@ -0,0 +1,262 @@
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
};