Files
console-dev/app/components/NotificationPreferences.vue
T
2026-11-06 00:04:38 +08:00

380 lines
14 KiB
Vue

<script>
import "~/assets/styles/NotificationPreferences.DcH8Noxd.css";
import { toDisplayString } from "vue";
import { onMounted } from "vue";
import { useId } from "vue";
import { onBeforeUnmount } from "vue";
import { createBlock } from "vue";
import { ref } from "vue";
import { withCtx } from "vue";
import { createCommentVNode } from "vue";
import { reactive } from "vue";
import { createElementBlock } from "vue";
import { createElementVNode } from "vue";
import { createTextVNode } from "vue";
import { unref } from "vue";
import { defineComponent } from "vue";
import { createVNode } from "vue";
import { openBlock } from "vue";
import { useApi } from "~/lib/auth.js";
import button from "primevue/button";
import { t as _plugin_vue_export_helper_t } from "~/lib/_plugin-vue_export-helper.js";
import message from "primevue/message";
import toggleswitch from "primevue/toggleswitch";
var x = [`aria-labelledby`],
S = {
class: `preferences-heading`,
},
C = [`id`],
w = [`id`],
T = [`aria-busy`],
E = {
class: `preference-row`,
},
D = {
class: `preference-copy`,
},
O = [`for`],
k = [`id`],
A = {
class: `preference-row`,
},
j = {
class: `preference-copy`,
},
M = [`for`],
N = [`id`],
P = {
key: 2,
class: `preferences-status`,
role: `status`,
},
F = Object.assign(
_plugin_vue_export_helper_t(
defineComponent({
__name: `NotificationPreferences`,
setup(p) {
let v = useApi(),
F = useId(),
I = reactive({
email_enabled: !1,
sms_enabled: !1,
email_available: !1,
sms_available: !1,
}),
L = ref(!1),
R = ref(!1),
z = ref(!1),
B = ref(``),
V = ref(``),
H = ref(``),
U = 0,
W = !1;
function G(e) {
let t = [
`email_enabled`,
`sms_enabled`,
`email_available`,
`sms_available`,
];
if (!e || t.some((t) => typeof e[t] != `boolean`))
throw Error(`提醒设置响应异常,请重试`);
for (let n of t) I[n] = e[n];
}
async function K() {
if (W || R.value || z.value) return;
let e = ++U;
((R.value = !0), (B.value = ``));
try {
let t = await v.get(`/account/notification-preferences`);
if (W || e !== U) return;
(G(t), (L.value = !0));
} catch (t) {
if (W || e !== U) return;
((B.value =
t instanceof Error ? t.message : `提醒设置加载失败,请重试`),
(L.value = !1));
} finally {
!W && e === U && (R.value = !1);
}
}
async function q(e, t) {
let n = e === `email_enabled` ? I.email_available : I.sms_available;
if (
W ||
!L.value ||
R.value ||
z.value ||
typeof t != `boolean` ||
I[e] === t ||
(t && !n)
)
return;
let r = ++U,
i = I[e];
((I[e] = t), (z.value = !0), (V.value = ``), (H.value = ``));
try {
let n = await v.put(`/account/notification-preferences`, {
[e]: t,
});
if (W || r !== U) return;
(G(n), (H.value = `提醒设置已保存`));
} catch (t) {
if (W || r !== U) return;
((I[e] = i),
(V.value =
t instanceof Error ? t.message : `保存失败,请重试`));
} finally {
!W && r === U && (z.value = !1);
}
}
return (
onMounted(K),
onBeforeUnmount(() => {
((W = !0), U++);
}),
(t, n) => {
let r = button,
a = message,
c = toggleswitch;
return (
openBlock(),
createElementBlock(
`section`,
{
class: `notification-preferences`,
"aria-labelledby": `${unref(F)}-title`,
},
[
createElementVNode(`div`, S, [
createElementVNode(`div`, null, [
createElementVNode(
`h3`,
{
id: `${unref(F)}-title`,
},
`提醒设置`,
8,
C,
),
createElementVNode(
`p`,
{
id: `${unref(F)}-description`,
},
`关闭后不接收普通提醒,站内消息和验证码不受影响。`,
8,
w,
),
]),
unref(B)
? (openBlock(),
createBlock(
r,
{
key: 0,
label: `重新加载`,
icon: `pi pi-refresh`,
size: `small`,
severity: `secondary`,
outlined: ``,
loading: unref(R),
onClick: K,
},
null,
8,
[`loading`],
))
: createCommentVNode(``, !0),
]),
unref(B)
? (openBlock(),
createBlock(
a,
{
key: 0,
severity: `error`,
closable: !1,
class: `preferences-message`,
},
{
default: withCtx(() => [
createTextVNode(toDisplayString(unref(B)), 1),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
unref(V)
? (openBlock(),
createBlock(
a,
{
key: 1,
severity: `error`,
closable: !1,
class: `preferences-message`,
},
{
default: withCtx(() => [
createTextVNode(toDisplayString(unref(V)), 1),
]),
_: 1,
},
))
: createCommentVNode(``, !0),
createElementVNode(
`div`,
{
class: `preference-rows`,
"aria-busy": unref(R) || unref(z),
},
[
createElementVNode(`div`, E, [
createElementVNode(`div`, D, [
createElementVNode(
`label`,
{
for: `${unref(F)}-email`,
class: `preference-label`,
},
`邮箱提醒`,
8,
O,
),
unref(L) && !unref(I).email_available
? (openBlock(),
createElementBlock(
`small`,
{
key: 0,
id: `${unref(F)}-email-hint`,
class: `preference-hint`,
},
`当前不可用,请检查绑定信息或联系管理员`,
8,
k,
))
: createCommentVNode(``, !0),
]),
createVNode(
c,
{
"input-id": `${unref(F)}-email`,
modelValue: unref(I).email_enabled,
disabled:
!unref(L) ||
unref(R) ||
unref(z) ||
(!unref(I).email_available &&
!unref(I).email_enabled),
"aria-label": `邮箱提醒`,
pt: {
input: {
"aria-describedby":
unref(L) && !unref(I).email_available
? `${unref(F)}-description ${unref(F)}-email-hint`
: `${unref(F)}-description`,
},
},
"onUpdate:modelValue": (n[0] ||= (e) =>
q(`email_enabled`, e)),
},
null,
8,
[`input-id`, `modelValue`, `disabled`, `pt`],
),
]),
createElementVNode(`div`, A, [
createElementVNode(`div`, j, [
createElementVNode(
`label`,
{
for: `${unref(F)}-sms`,
class: `preference-label`,
},
`短信提醒`,
8,
M,
),
unref(L) && !unref(I).sms_available
? (openBlock(),
createElementBlock(
`small`,
{
key: 0,
id: `${unref(F)}-sms-hint`,
class: `preference-hint`,
},
`当前不可用,请检查绑定信息或联系管理员`,
8,
N,
))
: createCommentVNode(``, !0),
]),
createVNode(
c,
{
"input-id": `${unref(F)}-sms`,
modelValue: unref(I).sms_enabled,
disabled:
!unref(L) ||
unref(R) ||
unref(z) ||
(!unref(I).sms_available &&
!unref(I).sms_enabled),
"aria-label": `短信提醒`,
pt: {
input: {
"aria-describedby":
unref(L) && !unref(I).sms_available
? `${unref(F)}-description ${unref(F)}-sms-hint`
: `${unref(F)}-description`,
},
},
"onUpdate:modelValue": (n[1] ||= (e) =>
q(`sms_enabled`, e)),
},
null,
8,
[`input-id`, `modelValue`, `disabled`, `pt`],
),
]),
],
8,
T,
),
unref(R) || unref(z) || unref(H)
? (openBlock(),
createElementBlock(
`p`,
P,
toDisplayString(
unref(R)
? `正在加载提醒设置…`
: unref(z)
? `正在保存…`
: unref(H),
),
1,
))
: createCommentVNode(``, !0),
],
8,
x,
)
);
}
);
},
}),
[[`__scopeId`, `data-v-f4132ec8`]],
),
{
__name: `NotificationPreferences`,
},
);
export {};
export default F;
</script>