Files
mail-front/assets/Admin-BC2FD85r.js

7213 lines
248 KiB
JavaScript

const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SendMail-gI-QSIA2.js","assets/index.esm-YCBPJhFu.js","assets/index-209f628e.js","assets/index-CeVFrBXC.css","assets/index-BHtaHxM4.css","assets/SendMail-aMwcx0sS.css"])))=>i.map(i=>d[i]);
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
import { d as ie, h as U, c as Ot, i as Nt, b as qt, a as Vt, e as Ft, f as Oe, _ as pe, r as Ne, u as St, g as Xe, j as jt, k as Wt, l as f, m as Ht, n as Te, w as Ze, o as Ut, p as xe, q as dt, N as ct, X as pt, A as Kt, s as ze, t as Gt, v as mt, x as Jt, y as Qt, z as Qe, B as Xt, C as Zt, D as E, E as Q, F as M, G as ee, H as ue, I as ae, J as te, K as O, L as Ye, M as P, O as le, P as e, Q as t, R as o, S as a, T as Lt, U as Ke, V as m, W as Ee, Y as Ge, Z as Ce, $ as st, a0 as qe, a1 as Yt, a2 as ea, a3 as It, a4 as _t, a5 as de, a6 as ot, a7 as ta, a8 as He, a9 as Mt, aa as Tt, ab as X, ac as rt, ad as Ve, ae as Z, af as aa, ag as Pt, ah as Et, ai as ge, aj as Fe, ak as la, al as re, am as Dt, an as ft, ao as Ue, ap as De, aq as Le, ar as it, as as et, at as vt, au as na, av as ut, aw as Rt, ax as sa, ay as $t, az as Bt, aA as zt, aB as oa, aC as ra, aD as ia, aE as ua, aF as da, aG as ca, aH as pa, aI as ma, __tla as __tla_0 } from "./index-209f628e.js";
let Ql;
let __tla = Promise.all([
(() => {
try {
return __tla_0;
} catch {
}
})()
]).then(async () => {
const _a = ie({
name: "Remove",
render() {
return U("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 512 512"
}, U("line", {
x1: "400",
y1: "256",
x2: "112",
y2: "256",
style: `
fill: none;
stroke: currentColor;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 32px;
`
}));
}
});
function fa(_) {
const { textColorDisabled: d } = _;
return {
iconColorDisabled: d
};
}
const va = Ot({
name: "InputNumber",
common: Vt,
peers: {
Button: qt,
Input: Nt
},
self: fa
}), ba = Ft([
Oe("input-number-suffix", `
display: inline-block;
margin-right: 10px;
`),
Oe("input-number-prefix", `
display: inline-block;
margin-left: 10px;
`)
]);
function ga(_) {
return _ == null || typeof _ == "string" && _.trim() === "" ? null : Number(_);
}
function ha(_) {
return _.includes(".") && (/^(-)?\d+.*(\.|0)$/.test(_) || /^-?\d*$/.test(_)) || _ === "-" || _ === "-0";
}
function lt(_) {
return _ == null ? true : !Number.isNaN(_);
}
function bt(_, d) {
return typeof _ != "number" ? "" : d === void 0 ? String(_) : _.toFixed(d);
}
function nt(_) {
if (_ === null) return null;
if (typeof _ == "number") return _;
{
const d = Number(_);
return Number.isNaN(d) ? null : d;
}
}
let gt, ht, ya, Je, wa, ka, xa, Ca, Aa, Sa, Pe, Ua, La, Ia, Ma, Ta, Pa, Ea, yt, Da, Ra, $a, Ba, za, Oa, Na, qa, Va, Fa, ja, Wa, Ha, Ka, Ga, Ja, Qa, Xa, Za, Ya, wt, el, tl, al, ll, nl, sl, ol, rl, il, ul, kt, dl, xt, cl, pl, ml, _l, fl, vl, bl, gl, hl, yl, wl, kl, xl, Cl, Al, Sl, Ul, Ct, Ll, Il, Ml, Tl, Pl, El, Dl, Rl, $l, Bl, At, zl, Ol, Nl, ql, Vl, Fl, jl, Wl, Hl, Kl, Gl;
gt = 800;
ht = 100;
ya = Object.assign(Object.assign({}, Xe.props), {
autofocus: Boolean,
loading: {
type: Boolean,
default: void 0
},
placeholder: String,
defaultValue: {
type: Number,
default: null
},
value: Number,
step: {
type: [
Number,
String
],
default: 1
},
min: [
Number,
String
],
max: [
Number,
String
],
size: String,
disabled: {
type: Boolean,
default: void 0
},
validator: Function,
bordered: {
type: Boolean,
default: void 0
},
showButton: {
type: Boolean,
default: true
},
buttonPlacement: {
type: String,
default: "right"
},
inputProps: Object,
readonly: Boolean,
clearable: Boolean,
keyboard: {
type: Object,
default: {}
},
updateValueOnInput: {
type: Boolean,
default: true
},
round: {
type: Boolean,
default: void 0
},
parse: Function,
format: Function,
precision: Number,
status: String,
"onUpdate:value": [
Function,
Array
],
onUpdateValue: [
Function,
Array
],
onFocus: [
Function,
Array
],
onBlur: [
Function,
Array
],
onClear: [
Function,
Array
],
onChange: [
Function,
Array
]
});
Je = ie({
name: "InputNumber",
props: ya,
slots: Object,
setup(_) {
const { mergedBorderedRef: d, mergedClsPrefixRef: r, mergedRtlRef: l } = St(_), n = Xe("InputNumber", "-input-number", ba, va, _, r), { localeRef: v } = jt("InputNumber"), p = Wt(_), { mergedSizeRef: s, mergedDisabledRef: y, mergedStatusRef: g } = p, i = f(null), c = f(null), x = f(null), C = f(_.defaultValue), L = Qt(_, "value"), u = Ht(L, C), b = f(""), w = (h) => {
const V = String(h).split(".")[1];
return V ? V.length : 0;
}, N = (h) => {
const V = [
_.min,
_.max,
_.step,
h
].map((G) => G === void 0 ? 0 : w(G));
return Math.max(...V);
}, K = Te(() => {
const { placeholder: h } = _;
return h !== void 0 ? h : v.value.placeholder;
}), D = Te(() => {
const h = nt(_.step);
return h !== null ? h === 0 ? 1 : Math.abs(h) : 1;
}), A = Te(() => {
const h = nt(_.min);
return h !== null ? h : null;
}), I = Te(() => {
const h = nt(_.max);
return h !== null ? h : null;
}), q = () => {
const { value: h } = u;
if (lt(h)) {
const { format: V, precision: G } = _;
V ? b.value = V(h) : h === null || G === void 0 || w(h) > G ? b.value = bt(h, void 0) : b.value = bt(h, G);
} else b.value = String(h);
};
q();
const W = (h) => {
const { value: V } = u;
if (h === V) {
q();
return;
}
const { "onUpdate:value": G, onUpdateValue: F, onChange: be } = _, { nTriggerFormInput: ke, nTriggerFormChange: Be } = p;
be && ze(be, h), F && ze(F, h), G && ze(G, h), C.value = h, ke(), Be();
}, k = ({ offset: h, doUpdateIfValid: V, fixPrecision: G, isInputing: F }) => {
const { value: be } = b;
if (F && ha(be)) return false;
const ke = (_.parse || ga)(be);
if (ke === null) return V && W(null), null;
if (lt(ke)) {
const Be = w(ke), { precision: We } = _;
if (We !== void 0 && We < Be && !G) return false;
let Se = Number.parseFloat((ke + h).toFixed(We ?? N(ke)));
if (lt(Se)) {
const { value: tt } = I, { value: at } = A;
if (tt !== null && Se > tt) {
if (!V || F) return false;
Se = tt;
}
if (at !== null && Se < at) {
if (!V || F) return false;
Se = at;
}
return _.validator && !_.validator(Se) ? false : (V && W(Se), Se);
}
}
return false;
}, $ = Te(() => k({
offset: 0,
doUpdateIfValid: false,
isInputing: false,
fixPrecision: false
}) === false), B = Te(() => {
const { value: h } = u;
if (_.validator && h === null) return false;
const { value: V } = D;
return k({
offset: -V,
doUpdateIfValid: false,
isInputing: false,
fixPrecision: false
}) !== false;
}), Y = Te(() => {
const { value: h } = u;
if (_.validator && h === null) return false;
const { value: V } = D;
return k({
offset: +V,
doUpdateIfValid: false,
isInputing: false,
fixPrecision: false
}) !== false;
});
function se(h) {
const { onFocus: V } = _, { nTriggerFormFocus: G } = p;
V && ze(V, h), G();
}
function _e(h) {
var V, G;
if (h.target === ((V = i.value) === null || V === void 0 ? void 0 : V.wrapperElRef)) return;
const F = k({
offset: 0,
doUpdateIfValid: true,
isInputing: false,
fixPrecision: true
});
if (F !== false) {
const Be = (G = i.value) === null || G === void 0 ? void 0 : G.inputElRef;
Be && (Be.value = String(F || "")), u.value === F && q();
} else q();
const { onBlur: be } = _, { nTriggerFormBlur: ke } = p;
be && ze(be, h), ke(), Gt(() => {
q();
});
}
function S(h) {
const { onClear: V } = _;
V && ze(V, h);
}
function R() {
const { value: h } = Y;
if (!h) {
j();
return;
}
const { value: V } = u;
if (V === null) _.validator || W(ce());
else {
const { value: G } = D;
k({
offset: G,
doUpdateIfValid: true,
isInputing: false,
fixPrecision: true
});
}
}
function ne() {
const { value: h } = B;
if (!h) {
J();
return;
}
const { value: V } = u;
if (V === null) _.validator || W(ce());
else {
const { value: G } = D;
k({
offset: -G,
doUpdateIfValid: true,
isInputing: false,
fixPrecision: true
});
}
}
const he = se, z = _e;
function ce() {
if (_.validator) return null;
const { value: h } = A, { value: V } = I;
return h !== null ? Math.max(0, h) : V !== null ? Math.min(0, V) : 0;
}
function H(h) {
S(h), W(null);
}
function je(h) {
var V, G, F;
!((V = x.value) === null || V === void 0) && V.$el.contains(h.target) && h.preventDefault(), !((G = c.value) === null || G === void 0) && G.$el.contains(h.target) && h.preventDefault(), (F = i.value) === null || F === void 0 || F.activate();
}
let ye = null, we = null, oe = null;
function J() {
oe && (window.clearTimeout(oe), oe = null), ye && (window.clearInterval(ye), ye = null);
}
let T = null;
function j() {
T && (window.clearTimeout(T), T = null), we && (window.clearInterval(we), we = null);
}
function Ie() {
J(), oe = window.setTimeout(() => {
ye = window.setInterval(() => {
ne();
}, ht);
}, gt), mt("mouseup", document, J, {
once: true
});
}
function me() {
j(), T = window.setTimeout(() => {
we = window.setInterval(() => {
R();
}, ht);
}, gt), mt("mouseup", document, j, {
once: true
});
}
const fe = () => {
we || R();
}, Re = () => {
ye || ne();
};
function Me(h) {
var V, G;
if (h.key === "Enter") {
if (h.target === ((V = i.value) === null || V === void 0 ? void 0 : V.wrapperElRef)) return;
k({
offset: 0,
doUpdateIfValid: true,
isInputing: false,
fixPrecision: true
}) !== false && ((G = i.value) === null || G === void 0 || G.deactivate());
} else if (h.key === "ArrowUp") {
if (!Y.value || _.keyboard.ArrowUp === false) return;
h.preventDefault(), k({
offset: 0,
doUpdateIfValid: true,
isInputing: false,
fixPrecision: true
}) !== false && R();
} else if (h.key === "ArrowDown") {
if (!B.value || _.keyboard.ArrowDown === false) return;
h.preventDefault(), k({
offset: 0,
doUpdateIfValid: true,
isInputing: false,
fixPrecision: true
}) !== false && ne();
}
}
function ve(h) {
b.value = h, _.updateValueOnInput && !_.format && !_.parse && _.precision === void 0 && k({
offset: 0,
doUpdateIfValid: true,
isInputing: true,
fixPrecision: false
});
}
Ze(u, () => {
q();
});
const Ae = {
focus: () => {
var h;
return (h = i.value) === null || h === void 0 ? void 0 : h.focus();
},
blur: () => {
var h;
return (h = i.value) === null || h === void 0 ? void 0 : h.blur();
},
select: () => {
var h;
return (h = i.value) === null || h === void 0 ? void 0 : h.select();
}
}, $e = Ut("InputNumber", l, r);
return Object.assign(Object.assign({}, Ae), {
rtlEnabled: $e,
inputInstRef: i,
minusButtonInstRef: c,
addButtonInstRef: x,
mergedClsPrefix: r,
mergedBordered: d,
uncontrolledValue: C,
mergedValue: u,
mergedPlaceholder: K,
displayedValueInvalid: $,
mergedSize: s,
mergedDisabled: y,
displayedValue: b,
addable: Y,
minusable: B,
mergedStatus: g,
handleFocus: he,
handleBlur: z,
handleClear: H,
handleMouseDown: je,
handleAddClick: fe,
handleMinusClick: Re,
handleAddMousedown: me,
handleMinusMousedown: Ie,
handleKeyDown: Me,
handleUpdateDisplayedValue: ve,
mergedTheme: n,
inputThemeOverrides: {
paddingSmall: "0 8px 0 10px",
paddingMedium: "0 8px 0 12px",
paddingLarge: "0 8px 0 14px"
},
buttonThemeOverrides: xe(() => {
const { self: { iconColorDisabled: h } } = n.value, [V, G, F, be] = Jt(h);
return {
textColorTextDisabled: `rgb(${V}, ${G}, ${F})`,
opacityDisabled: `${be}`
};
})
});
},
render() {
const { mergedClsPrefix: _, $slots: d } = this, r = () => U(pt, {
text: true,
disabled: !this.minusable || this.mergedDisabled || this.readonly,
focusable: false,
theme: this.mergedTheme.peers.Button,
themeOverrides: this.mergedTheme.peerOverrides.Button,
builtinThemeOverrides: this.buttonThemeOverrides,
onClick: this.handleMinusClick,
onMousedown: this.handleMinusMousedown,
ref: "minusButtonInstRef"
}, {
icon: () => dt(d["minus-icon"], () => [
U(ct, {
clsPrefix: _
}, {
default: () => U(_a, null)
})
])
}), l = () => U(pt, {
text: true,
disabled: !this.addable || this.mergedDisabled || this.readonly,
focusable: false,
theme: this.mergedTheme.peers.Button,
themeOverrides: this.mergedTheme.peerOverrides.Button,
builtinThemeOverrides: this.buttonThemeOverrides,
onClick: this.handleAddClick,
onMousedown: this.handleAddMousedown,
ref: "addButtonInstRef"
}, {
icon: () => dt(d["add-icon"], () => [
U(ct, {
clsPrefix: _
}, {
default: () => U(Kt, null)
})
])
});
return U("div", {
class: [
`${_}-input-number`,
this.rtlEnabled && `${_}-input-number--rtl`
]
}, U(pe, {
ref: "inputInstRef",
autofocus: this.autofocus,
status: this.mergedStatus,
bordered: this.mergedBordered,
loading: this.loading,
value: this.displayedValue,
onUpdateValue: this.handleUpdateDisplayedValue,
theme: this.mergedTheme.peers.Input,
themeOverrides: this.mergedTheme.peerOverrides.Input,
builtinThemeOverrides: this.inputThemeOverrides,
size: this.mergedSize,
placeholder: this.mergedPlaceholder,
disabled: this.mergedDisabled,
readonly: this.readonly,
round: this.round,
textDecoration: this.displayedValueInvalid ? "line-through" : void 0,
onFocus: this.handleFocus,
onBlur: this.handleBlur,
onKeydown: this.handleKeyDown,
onMousedown: this.handleMouseDown,
onClear: this.handleClear,
clearable: this.clearable,
inputProps: this.inputProps,
internalLoadingBeforeSuffix: true
}, {
prefix: () => {
var n;
return this.showButton && this.buttonPlacement === "both" ? [
r(),
Ne(d.prefix, (v) => v ? U("span", {
class: `${_}-input-number-prefix`
}, v) : null)
] : (n = d.prefix) === null || n === void 0 ? void 0 : n.call(d);
},
suffix: () => {
var n;
return this.showButton ? [
Ne(d.suffix, (v) => v ? U("span", {
class: `${_}-input-number-suffix`
}, v) : null),
this.buttonPlacement === "right" ? r() : null,
l()
] : (n = d.suffix) === null || n === void 0 ? void 0 : n.call(d);
}
}));
}
});
wa = Oe("statistic", [
Qe("label", `
font-weight: var(--n-label-font-weight);
transition: .3s color var(--n-bezier);
font-size: var(--n-label-font-size);
color: var(--n-label-text-color);
`),
Oe("statistic-value", `
margin-top: 4px;
font-weight: var(--n-value-font-weight);
`, [
Qe("prefix", `
margin: 0 4px 0 0;
font-size: var(--n-value-font-size);
transition: .3s color var(--n-bezier);
color: var(--n-value-prefix-text-color);
`, [
Oe("icon", {
verticalAlign: "-0.125em"
})
]),
Qe("content", `
font-size: var(--n-value-font-size);
transition: .3s color var(--n-bezier);
color: var(--n-value-text-color);
`),
Qe("suffix", `
margin: 0 0 0 4px;
font-size: var(--n-value-font-size);
transition: .3s color var(--n-bezier);
color: var(--n-value-suffix-text-color);
`, [
Oe("icon", {
verticalAlign: "-0.125em"
})
])
])
]);
ka = Object.assign(Object.assign({}, Xe.props), {
tabularNums: Boolean,
label: String,
value: [
String,
Number
]
});
xa = ie({
name: "Statistic",
props: ka,
slots: Object,
setup(_) {
const { mergedClsPrefixRef: d, inlineThemeDisabled: r, mergedRtlRef: l } = St(_), n = Xe("Statistic", "-statistic", wa, Xt, _, d), v = Ut("Statistic", l, d), p = xe(() => {
const { self: { labelFontWeight: y, valueFontSize: g, valueFontWeight: i, valuePrefixTextColor: c, labelTextColor: x, valueSuffixTextColor: C, valueTextColor: L, labelFontSize: u }, common: { cubicBezierEaseInOut: b } } = n.value;
return {
"--n-bezier": b,
"--n-label-font-size": u,
"--n-label-font-weight": y,
"--n-label-text-color": x,
"--n-value-font-weight": i,
"--n-value-font-size": g,
"--n-value-prefix-text-color": c,
"--n-value-suffix-text-color": C,
"--n-value-text-color": L
};
}), s = r ? Zt("statistic", void 0, p, _) : void 0;
return {
rtlEnabled: v,
mergedClsPrefix: d,
cssVars: r ? void 0 : p,
themeClass: s == null ? void 0 : s.themeClass,
onRender: s == null ? void 0 : s.onRender
};
},
render() {
var _;
const { mergedClsPrefix: d, $slots: { default: r, label: l, prefix: n, suffix: v } } = this;
return (_ = this.onRender) === null || _ === void 0 || _.call(this), U("div", {
class: [
`${d}-statistic`,
this.themeClass,
this.rtlEnabled && `${d}-statistic--rtl`
],
style: this.cssVars
}, Ne(l, (p) => U("div", {
class: `${d}-statistic__label`
}, this.label || p)), U("div", {
class: `${d}-statistic-value`,
style: {
fontVariantNumeric: this.tabularNums ? "tabular-nums" : ""
}
}, Ne(n, (p) => p && U("span", {
class: `${d}-statistic-value__prefix`
}, p)), this.value !== void 0 ? U("span", {
class: `${d}-statistic-value__content`
}, this.value) : Ne(r, (p) => p && U("span", {
class: `${d}-statistic-value__content`
}, p)), Ne(v, (p) => p && U("span", {
class: `${d}-statistic-value__suffix`
}, p))));
}
});
Ca = {
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
viewBox: "0 0 24 24"
};
Aa = ie({
name: "AddFilled",
render: function(d, r) {
return E(), Q("svg", Ca, r[0] || (r[0] = [
M("path", {
d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",
fill: "currentColor"
}, null, -1)
]));
}
});
Sa = {
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
viewBox: "0 0 24 24"
};
Pe = ie({
name: "CleaningServicesFilled",
render: function(d, r) {
return E(), Q("svg", Sa, r[0] || (r[0] = [
M("path", {
d: "M16 11h-1V3c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v8H8c-2.76 0-5 2.24-5 5v7h18v-7c0-2.76-2.24-5-5-5zm3 10h-2v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-2v-3c0-.55-.45-1-1-1s-1 .45-1 1v3H9v-3c0-.55-.45-1-1-1s-1 .45-1 1v3H5v-5c0-1.65 1.35-3 3-3h8c1.65 0 3 1.35 3 3v5z",
fill: "currentColor"
}, null, -1)
]));
}
});
Ua = {
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
viewBox: "0 0 24 24"
};
La = ie({
name: "DeleteFilled",
render: function(d, r) {
return E(), Q("svg", Ua, r[0] || (r[0] = [
M("path", {
d: "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z",
fill: "currentColor"
}, null, -1)
]));
}
});
Ia = {
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
viewBox: "0 0 24 24"
};
Ma = ie({
name: "SendOutlined",
render: function(d, r) {
return E(), Q("svg", Ia, r[0] || (r[0] = [
M("path", {
d: "M4.01 6.03l7.51 3.22l-7.52-1l.01-2.22m7.5 8.72L4 17.97v-2.22l7.51-1M2.01 3L2 10l15 2l-15 2l.01 7L23 12L2.01 3z",
fill: "currentColor"
}, null, -1)
]));
}
});
Ta = {
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
viewBox: "0 0 576 512"
};
Pa = ie({
name: "MailBulk",
render: function(d, r) {
return E(), Q("svg", Ta, r[0] || (r[0] = [
M("path", {
d: "M160 448c-25.6 0-51.2-22.4-64-32c-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4c-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4c9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z",
fill: "currentColor"
}, null, -1)
]));
}
});
Ea = {
xmlns: "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
viewBox: "0 0 640 512"
};
yt = ie({
name: "UserCheck",
render: function(d, r) {
return E(), Q("svg", Ea, r[0] || (r[0] = [
M("path", {
d: "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0S96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104l-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z",
fill: "currentColor"
}, null, -1)
]));
}
});
Da = {
style: {
overflow: "auto"
}
};
Ra = {
style: {
display: "inline-block"
}
};
$a = {
__name: "SenderAccess",
setup(_) {
const { loading: d } = ue(), r = ae(), { t: l } = te({
messages: {
en: {
address: "Address",
success: "Success",
is_enabled: "Is Enabled",
enable: "Enable",
disable: "Disable",
modify: "Modify",
delete: "Delete",
deleteTip: "Are you sure to delete this?",
created_at: "Created At",
action: "Action",
itemCount: "itemCount",
modalTip: "Please input the sender balance",
balance: "Balance",
query: "Query",
ok: "OK"
},
zh: {
address: "\u5730\u5740",
success: "\u6210\u529F",
is_enabled: "\u662F\u5426\u542F\u7528",
enable: "\u542F\u7528",
disable: "\u7981\u7528",
modify: "\u4FEE\u6539",
delete: "\u5220\u9664",
deleteTip: "\u786E\u5B9A\u5220\u9664\u5417\uFF1F",
created_at: "\u521B\u5EFA\u65F6\u95F4",
action: "\u64CD\u4F5C",
itemCount: "\u603B\u6570",
modalTip: "\u8BF7\u8F93\u5165\u53D1\u4EF6\u989D\u5EA6",
balance: "\u4F59\u989D",
query: "\u67E5\u8BE2",
ok: "\u786E\u5B9A"
}
}
}), n = f([]), v = f(0), p = f(1), s = f(20), y = f({}), g = f(false), i = f(0), c = f(false), x = f(""), C = async () => {
try {
await P.fetch("/admin/address_sender", {
method: "POST",
body: JSON.stringify({
address: y.value.address,
address_id: y.value.id,
balance: i.value,
enabled: c.value ? 1 : 0
})
}), g.value = false, r.success(l("success")), await L();
} catch (b) {
r.error(b.message || "error");
}
}, L = async () => {
try {
x.value = x.value.trim();
const { results: b, count: w } = await P.fetch(`/admin/address_sender?limit=${s.value}&offset=${(p.value - 1) * s.value}` + (x.value ? `&address=${x.value}` : ""));
n.value = b, w > 0 && (v.value = w);
} catch (b) {
console.log(b), r.error(b.message || "error");
}
}, u = [
{
title: "ID",
key: "id"
},
{
title: l("address"),
key: "address"
},
{
title: l("created_at"),
key: "created_at"
},
{
title: l("balance"),
key: "balance"
},
{
title: l("is_enabled"),
key: "enabled",
render(b) {
return U("div", [
U("span", b.enabled ? l("enable") : l("disable"))
]);
}
},
{
title: l("action"),
key: "actions",
render(b) {
return U("div", [
U(O, {
type: "success",
tertiary: true,
onClick: () => {
g.value = true, y.value = b, c.value = !!b.enabled, i.value = b.balance;
}
}, {
default: () => l("modify")
}),
U(Ye, {
onPositiveClick: async () => {
await P.fetch(`/admin/address_sender/${b.id}`, {
method: "DELETE"
}), await L();
}
}, {
trigger: () => U(O, {
tertiary: true,
type: "error"
}, {
default: () => l("delete")
}),
default: () => l("deleteTip")
})
]);
}
}
];
return Ze([
p,
s
], async () => {
await L();
}), le(async () => {
await L();
}), (b, w) => {
const N = Ke, K = Lt, D = Je, A = O, I = Ee, q = pe, W = Ce, k = st, $ = qe;
return E(), Q("div", null, [
e(I, {
show: g.value,
"onUpdate:show": w[3] || (w[3] = (B) => g.value = B),
preset: "dialog"
}, {
action: t(() => [
e(A, {
loading: a(d),
onClick: w[2] || (w[2] = (B) => C()),
size: "small",
tertiary: "",
type: "primary"
}, {
default: t(() => [
m(o(a(l)("ok")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(y.value.address), 1),
M("p", null, o(a(l)("modalTip")), 1),
e(K, {
"show-label": false
}, {
default: t(() => [
e(N, {
checked: c.value,
"onUpdate:checked": w[0] || (w[0] = (B) => c.value = B)
}, {
default: t(() => [
m(o(a(l)("enable")), 1)
]),
_: 1
}, 8, [
"checked"
])
]),
_: 1
}),
e(K, {
"show-label": false
}, {
default: t(() => [
e(D, {
value: i.value,
"onUpdate:value": w[1] || (w[1] = (B) => i.value = B),
min: 0,
max: 1e3
}, null, 8, [
"value"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"show"
]),
e(W, null, {
default: t(() => [
e(q, {
value: x.value,
"onUpdate:value": w[4] || (w[4] = (B) => x.value = B),
onKeydown: Ge(L, [
"enter"
])
}, null, 8, [
"value"
]),
e(A, {
onClick: L,
type: "primary",
tertiary: ""
}, {
default: t(() => [
m(o(a(l)("query")), 1)
]),
_: 1
})
]),
_: 1
}),
M("div", Da, [
M("div", Ra, [
e(k, {
page: p.value,
"onUpdate:page": w[5] || (w[5] = (B) => p.value = B),
"page-size": s.value,
"onUpdate:pageSize": w[6] || (w[6] = (B) => s.value = B),
"item-count": v.value,
"page-sizes": [
20,
50,
100
],
"show-size-picker": ""
}, {
prefix: t(({ itemCount: B }) => [
m(o(a(l)("itemCount")) + ": " + o(B), 1)
]),
_: 1
}, 8, [
"page",
"page-size",
"item-count"
])
]),
e($, {
columns: u,
data: n.value,
bordered: false,
embedded: ""
}, null, 8, [
"data"
])
])
]);
};
}
};
Ba = ee($a, [
[
"__scopeId",
"data-v-bd8929db"
]
]);
za = {
__name: "Statistics",
setup(_) {
const d = ae(), { t: r } = te({
messages: {
en: {
userCount: "User Count",
addressCount: "Address Count",
activeAddressCount7days: "7 days Active Address Count",
activeAddressCount30days: "30 days Active Address Count",
mailCount: "Mail Count",
sendMailCount: "Send Mail Count"
},
zh: {
userCount: "\u7528\u6237\u603B\u6570",
addressCount: "\u90AE\u7BB1\u5730\u5740\u603B\u6570",
activeAddressCount7days: "7\u5929\u6D3B\u8DC3\u90AE\u7BB1\u5730\u5740\u603B\u6570",
activeAddressCount30days: "30\u5929\u6D3B\u8DC3\u90AE\u7BB1\u5730\u5740\u603B\u6570",
mailCount: "\u90AE\u4EF6\u603B\u6570",
sendMailCount: "\u53D1\u9001\u90AE\u4EF6\u603B\u6570"
}
}
}), l = f({
addressCount: 0,
userCount: 0,
mailCount: 0,
activeAddressCount7days: 0,
activeAddressCount30days: 0,
sendMailCount: 0
}), n = async () => {
try {
const { userCount: v, mailCount: p, sendMailCount: s, addressCount: y, activeAddressCount7days: g, activeAddressCount30days: i } = await P.fetch("/admin/statistics");
l.value.mailCount = p || 0, l.value.sendMailCount = s || 0, l.value.userCount = v || 0, l.value.addressCount = y || 0, l.value.activeAddressCount7days = g || 0, l.value.activeAddressCount30days = i || 0;
} catch (v) {
console.log(v), d.error(v.message || "error");
}
};
return le(async () => {
await n();
}), (v, p) => {
const s = It, y = xa, g = ea, i = Yt, c = de;
return E(), Q("div", null, [
e(c, {
bordered: false,
embedded: ""
}, {
default: t(() => [
e(i, null, {
default: t(() => [
e(g, {
span: 8
}, {
default: t(() => [
e(y, {
label: a(r)("addressCount"),
value: l.value.addressCount
}, {
prefix: t(() => [
e(s, {
component: a(_t)
}, null, 8, [
"component"
])
]),
_: 1
}, 8, [
"label",
"value"
])
]),
_: 1
}),
e(g, {
span: 8
}, {
default: t(() => [
e(y, {
label: a(r)("activeAddressCount7days"),
value: l.value.activeAddressCount7days
}, {
prefix: t(() => [
e(s, {
component: a(yt)
}, null, 8, [
"component"
])
]),
_: 1
}, 8, [
"label",
"value"
])
]),
_: 1
}),
e(g, {
span: 8
}, {
default: t(() => [
e(y, {
label: a(r)("activeAddressCount30days"),
value: l.value.activeAddressCount30days
}, {
prefix: t(() => [
e(s, {
component: a(yt)
}, null, 8, [
"component"
])
]),
_: 1
}, 8, [
"label",
"value"
])
]),
_: 1
})
]),
_: 1
})
]),
_: 1
}),
e(c, {
bordered: false,
embedded: ""
}, {
default: t(() => [
e(i, null, {
default: t(() => [
e(g, {
span: 8
}, {
default: t(() => [
e(y, {
label: a(r)("userCount"),
value: l.value.userCount
}, {
prefix: t(() => [
e(s, {
component: a(_t)
}, null, 8, [
"component"
])
]),
_: 1
}, 8, [
"label",
"value"
])
]),
_: 1
}),
e(g, {
span: 8
}, {
default: t(() => [
e(y, {
label: a(r)("mailCount"),
value: l.value.mailCount
}, {
prefix: t(() => [
e(s, {
component: a(Pa)
}, null, 8, [
"component"
])
]),
_: 1
}, 8, [
"label",
"value"
])
]),
_: 1
}),
e(g, {
span: 8
}, {
default: t(() => [
e(y, {
label: a(r)("sendMailCount"),
value: l.value.sendMailCount
}, {
prefix: t(() => [
e(s, {
component: a(Ma)
}, null, 8, [
"component"
])
]),
_: 1
}, 8, [
"label",
"value"
])
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]);
};
}
};
Oa = ee(za, [
[
"__scopeId",
"data-v-b73833c7"
]
]);
Na = {
__name: "SendBox",
setup(_) {
const { adminSendBoxTabAddress: d } = ue(), { t: r } = te({
messages: {
en: {
query: "Query",
queryTip: "Please input address to query, leave blank to query all"
},
zh: {
query: "\u67E5\u8BE2",
queryTip: "\u8BF7\u8F93\u5165\u5730\u5740\u67E5\u8BE2, \u7559\u7A7A\u5219\u67E5\u8BE2\u6240\u6709"
}
}
}), l = async (v, p) => (d.value = d.value.trim(), await P.fetch(`/admin/sendbox?limit=${v}&offset=${p}` + (d.value ? `&address=${d.value}` : ""))), n = async (v) => {
await P.fetch(`/admin/sendbox/${v}`, {
method: "DELETE"
});
};
return (v, p) => {
const s = pe, y = O, g = Ce;
return E(), Q("div", null, [
e(g, null, {
default: t(() => [
e(s, {
value: a(d),
"onUpdate:value": p[0] || (p[0] = (i) => ot(d) ? d.value = i : null),
placeholder: a(r)("queryTip"),
onKeydown: Ge(l, [
"enter"
])
}, null, 8, [
"value",
"placeholder"
]),
e(y, {
onClick: l,
type: "primary",
tertiary: ""
}, {
default: t(() => [
m(o(a(r)("query")), 1)
]),
_: 1
})
]),
_: 1
}),
e(ta, {
style: {
"margin-top": "10px"
},
enableUserDeleteEmail: true,
deleteMail: n,
fetchMailData: l,
showEMailFrom: true
})
]);
};
}
};
qa = ee(Na, [
[
"__scopeId",
"data-v-fbae4450"
]
]);
Va = {
style: {
"margin-top": "10px"
}
};
Fa = {
style: {
overflow: "auto"
}
};
ja = {
style: {
display: "inline-block"
}
};
Wa = {
style: {
"text-align": "center"
}
};
Ha = {
__name: "Account",
setup(_) {
const { loading: d, adminTab: r, openSettings: l, adminMailTabAddress: n, adminSendBoxTabAddress: v } = ue(), p = ae(), { t: s } = te({
messages: {
en: {
name: "Name",
created_at: "Created At",
updated_at: "Update At",
mail_count: "Mail Count",
send_count: "Send Count",
source_meta: "Source",
showCredential: "Show Mail Address Credential",
addressCredential: "Mail Address Credential",
addressCredentialTip: "Please copy the Mail Address Credential and you can use it to login to your email account.",
delete: "Delete",
deleteTip: "Are you sure to delete this email?",
deleteAccount: "Delete Account",
viewMails: "View Mails",
viewSendBox: "View SendBox",
itemCount: "itemCount",
query: "Query",
addressQueryTip: "Leave blank to query all addresses",
clearInbox: "Clear Inbox",
clearSentItems: "Clear Sent Items",
clearInboxTip: "Are you sure to clear inbox for this email?",
clearSentItemsTip: "Are you sure to clear sent items for this email?",
actions: "Actions",
success: "Success",
resetPassword: "Reset Password",
newPassword: "New Password",
passwordResetSuccess: "Password reset successfully",
selectAll: "Select All of This Page",
unselectAll: "Unselect All",
pleaseSelectAddress: "Please select address",
selectedItems: "Selected",
multiDelete: "Multi Delete",
multiDeleteTip: "Are you sure to delete selected addresses?",
multiClearInbox: "Multi Clear Inbox",
multiClearInboxTip: "Are you sure to clear inbox for selected addresses?",
multiClearSentItems: "Multi Clear Sent Items",
multiClearSentItemsTip: "Are you sure to clear sent items for selected addresses?"
},
zh: {
name: "\u540D\u79F0",
created_at: "\u521B\u5EFA\u65F6\u95F4",
updated_at: "\u66F4\u65B0\u65F6\u95F4",
mail_count: "\u90AE\u4EF6\u6570\u91CF",
send_count: "\u53D1\u9001\u6570\u91CF",
source_meta: "\u6765\u6E90",
showCredential: "\u67E5\u770B\u90AE\u7BB1\u5730\u5740\u51ED\u8BC1",
addressCredential: "\u90AE\u7BB1\u5730\u5740\u51ED\u8BC1",
addressCredentialTip: "\u8BF7\u590D\u5236\u90AE\u7BB1\u5730\u5740\u51ED\u8BC1\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u5B83\u767B\u5F55\u4F60\u7684\u90AE\u7BB1\u3002",
delete: "\u5220\u9664",
deleteTip: "\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u90AE\u7BB1\u5417\uFF1F",
deleteAccount: "\u5220\u9664\u90AE\u7BB1",
viewMails: "\u67E5\u770B\u90AE\u4EF6",
viewSendBox: "\u67E5\u770B\u53D1\u4EF6\u7BB1",
itemCount: "\u603B\u6570",
query: "\u67E5\u8BE2",
addressQueryTip: "\u7559\u7A7A\u67E5\u8BE2\u6240\u6709\u5730\u5740",
clearInbox: "\u6E05\u7A7A\u6536\u4EF6\u7BB1",
clearSentItems: "\u6E05\u7A7A\u53D1\u4EF6\u7BB1",
clearInboxTip: "\u786E\u5B9A\u8981\u6E05\u7A7A\u8FD9\u4E2A\u90AE\u7BB1\u7684\u6536\u4EF6\u7BB1\u5417\uFF1F",
clearSentItemsTip: "\u786E\u5B9A\u8981\u6E05\u7A7A\u8FD9\u4E2A\u90AE\u7BB1\u7684\u53D1\u4EF6\u7BB1\u5417\uFF1F",
actions: "\u64CD\u4F5C",
success: "\u6210\u529F",
resetPassword: "\u91CD\u7F6E\u5BC6\u7801",
newPassword: "\u65B0\u5BC6\u7801",
passwordResetSuccess: "\u5BC6\u7801\u91CD\u7F6E\u6210\u529F",
selectAll: "\u5168\u9009\u672C\u9875",
unselectAll: "\u53D6\u6D88\u5168\u9009",
pleaseSelectAddress: "\u8BF7\u9009\u62E9\u5730\u5740",
selectedItems: "\u5DF2\u9009\u62E9",
multiDelete: "\u6279\u91CF\u5220\u9664",
multiDeleteTip: "\u786E\u5B9A\u8981\u5220\u9664\u9009\u4E2D\u7684\u90AE\u7BB1\u5417\uFF1F",
multiClearInbox: "\u6279\u91CF\u6E05\u7A7A\u6536\u4EF6\u7BB1",
multiClearInboxTip: "\u786E\u5B9A\u8981\u6E05\u7A7A\u9009\u4E2D\u90AE\u7BB1\u7684\u6536\u4EF6\u7BB1\u5417\uFF1F",
multiClearSentItems: "\u6279\u91CF\u6E05\u7A7A\u53D1\u4EF6\u7BB1",
multiClearSentItemsTip: "\u786E\u5B9A\u8981\u6E05\u7A7A\u9009\u4E2D\u90AE\u7BB1\u7684\u53D1\u4EF6\u7BB1\u5417\uFF1F"
}
}
}), y = f(false), g = f(""), i = f(0), c = f(0), x = f(0), C = f(false), L = f(0), u = f(""), b = f([]), w = f(false), N = f({
percentage: 0,
tip: "0/0"
}), K = f(""), D = xe(() => b.value.length), A = xe(() => b.value.length > 0), I = f(""), q = f([]), W = f(0), k = f(1), $ = f(20), B = f(false), Y = f(false), se = f(false), _e = async (T) => {
try {
g.value = await P.adminShowAddressCredential(T), y.value = true;
} catch (j) {
p.error(j.message || "error"), y.value = false, g.value = "";
}
}, S = async () => {
try {
await P.adminDeleteAddress(i.value), p.success(s("success")), await oe();
} catch (T) {
p.error(T.message || "error");
} finally {
B.value = false;
}
}, R = async () => {
try {
await P.fetch(`/admin/clear_inbox/${c.value}`, {
method: "DELETE"
}), p.success(s("success")), await oe();
} catch (T) {
p.error(T.message || "error");
} finally {
Y.value = false;
}
}, ne = async () => {
try {
await P.fetch(`/admin/clear_sent_items/${x.value}`, {
method: "DELETE"
}), p.success(s("success")), await oe();
} catch (T) {
p.error(T.message || "error");
} finally {
se.value = false;
}
}, he = async () => {
try {
await P.fetch(`/admin/address/${L.value}/reset_password`, {
method: "POST",
body: JSON.stringify({
password: u.value
})
}), p.success(s("passwordResetSuccess")), u.value = "", C.value = false;
} catch (T) {
p.error(T.message || "error");
}
}, z = () => {
b.value = q.value.map((T) => T.id);
}, ce = () => {
b.value = [];
}, H = async ({ shouldSkip: T = () => false, apiCall: j, title: Ie, operationName: me = "operation" }) => {
try {
d.value = true;
const fe = q.value.filter((ve) => b.value.includes(ve.id));
if (fe.length === 0) {
p.error(s("pleaseSelectAddress"));
return;
}
const Re = [], Me = fe.length;
N.value = {
percentage: 0,
tip: `0/${Me}`
}, K.value = Ie, w.value = true;
for (const [ve, Ae] of fe.entries()) {
try {
T(Ae) || await j(Ae.id);
} catch ($e) {
console.error(`${me} failed for address ${Ae.id}:`, $e), Re.push(Ae.id);
}
N.value = {
percentage: Math.floor((ve + 1) / Me * 100),
tip: `${ve + 1}/${Me}`
};
}
await oe(), b.value = Re, p.success(s("success"));
} catch (fe) {
p.error(fe.message || "error");
} finally {
d.value = false;
}
}, je = async () => {
await H({
apiCall: (T) => P.adminDeleteAddress(T),
title: s("multiDelete") + " " + s("success"),
operationName: "Delete"
});
}, ye = async () => {
await H({
shouldSkip: (T) => T.mail_count <= 0,
apiCall: (T) => P.fetch(`/admin/clear_inbox/${T}`, {
method: "DELETE"
}),
title: s("multiClearInbox") + " " + s("success"),
operationName: "ClearInbox"
});
}, we = async () => {
await H({
shouldSkip: (T) => T.send_count <= 0,
apiCall: (T) => P.fetch(`/admin/clear_sent_items/${T}`, {
method: "DELETE"
}),
title: s("multiClearSentItems") + " " + s("success"),
operationName: "ClearSentItems"
});
}, oe = async () => {
try {
I.value = I.value.trim();
const { results: T, count: j } = await P.fetch(`/admin/address?limit=${$.value}&offset=${(k.value - 1) * $.value}` + (I.value ? `&query=${I.value}` : ""));
q.value = T, j > 0 && (W.value = j);
} catch (T) {
console.error(T), p.error(T.message || "error");
}
}, J = [
{
type: "selection"
},
{
title: "ID",
key: "id"
},
{
title: s("name"),
key: "name"
},
{
title: s("created_at"),
key: "created_at"
},
{
title: s("updated_at"),
key: "updated_at"
},
{
title: s("source_meta"),
key: "source_meta",
render(T) {
const j = T.source_meta;
if (!j) return "";
const Ie = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, me = /^[0-9a-fA-F:]+$/;
return Ie.test(j) || j.includes(":") && me.test(j) && !j.startsWith("tg:") ? U("a", {
href: `https://ip.im/${j}`,
target: "_blank",
rel: "noopener noreferrer"
}, j) : j;
}
},
{
title: s("mail_count"),
key: "mail_count",
render(T) {
return U(O, {
text: true,
onClick: () => {
T.mail_count > 0 && (n.value = T.name, r.value = "mails");
}
}, {
icon: () => U(He, {
value: T.mail_count,
"show-zero": true,
max: 99,
type: "success"
}),
default: () => T.mail_count > 0 ? s("viewMails") : ""
});
}
},
{
title: s("send_count"),
key: "send_count",
render(T) {
return U(O, {
text: true,
onClick: () => {
T.send_count > 0 && (v.value = T.name, r.value = "sendBox");
}
}, {
icon: () => U(He, {
value: T.send_count,
"show-zero": true,
max: 99,
type: "success"
}),
default: () => T.send_count > 0 ? s("viewSendBox") : ""
});
}
},
{
title: s("actions"),
key: "actions",
render(T) {
var _a2;
return U("div", [
U(Mt, {
mode: "horizontal",
options: [
{
label: s("actions"),
icon: () => U(Tt),
key: "action",
children: [
{
label: () => U(O, {
text: true,
onClick: () => _e(T.id)
}, {
default: () => s("showCredential")
})
},
{
label: () => U(O, {
text: true,
onClick: () => {
n.value = T.name, r.value = "mails";
}
}, {
default: () => s("viewMails")
}),
show: T.mail_count > 0
},
{
label: () => U(O, {
text: true,
onClick: () => {
v.value = T.name, r.value = "sendBox";
}
}, {
default: () => s("viewSendBox")
}),
show: T.send_count > 0
},
{
label: () => U(O, {
text: true,
onClick: () => {
c.value = T.id, Y.value = true;
}
}, {
default: () => s("clearInbox")
}),
show: T.mail_count > 0
},
{
label: () => U(O, {
text: true,
onClick: () => {
x.value = T.id, se.value = true;
}
}, {
default: () => s("clearSentItems")
}),
show: T.send_count > 0
},
{
label: () => U(O, {
text: true,
onClick: () => {
L.value = T.id, C.value = true;
}
}, {
default: () => s("resetPassword")
}),
show: (_a2 = l.value) == null ? void 0 : _a2.enableAddressPassword
},
{
label: () => U(O, {
text: true,
onClick: () => {
i.value = T.id, B.value = true;
}
}, {
default: () => s("delete")
})
}
]
}
]
})
]);
}
}
];
return Ze([
k,
$
], async () => {
await oe();
}), le(async () => {
await oe();
}), (T, j) => {
const Ie = de, me = Ee, fe = pe, Re = Lt, Me = Ce, ve = Ye, Ae = rt, $e = Ve, h = st, V = qe, G = aa;
return E(), Q("div", Va, [
e(me, {
show: y.value,
"onUpdate:show": j[0] || (j[0] = (F) => y.value = F),
preset: "dialog",
title: "Dialog"
}, {
header: t(() => [
M("div", null, o(a(s)("addressCredential")), 1)
]),
action: t(() => [
...j[11] || (j[11] = [])
]),
default: t(() => [
M("span", null, [
M("p", null, o(a(s)("addressCredentialTip")), 1)
]),
e(Ie, {
bordered: false,
embedded: ""
}, {
default: t(() => [
M("b", null, o(g.value), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"show"
]),
e(me, {
show: B.value,
"onUpdate:show": j[1] || (j[1] = (F) => B.value = F),
preset: "dialog",
title: a(s)("deleteAccount")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: S,
size: "small",
tertiary: "",
type: "error"
}, {
default: t(() => [
m(o(a(s)("deleteAccount")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(a(s)("deleteTip")), 1)
]),
_: 1
}, 8, [
"show",
"title"
]),
e(me, {
show: Y.value,
"onUpdate:show": j[2] || (j[2] = (F) => Y.value = F),
preset: "dialog",
title: a(s)("clearInbox")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: R,
size: "small",
tertiary: "",
type: "error"
}, {
default: t(() => [
m(o(a(s)("clearInbox")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(a(s)("clearInboxTip")), 1)
]),
_: 1
}, 8, [
"show",
"title"
]),
e(me, {
show: se.value,
"onUpdate:show": j[3] || (j[3] = (F) => se.value = F),
preset: "dialog",
title: a(s)("clearSentItems")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: ne,
size: "small",
tertiary: "",
type: "error"
}, {
default: t(() => [
m(o(a(s)("clearSentItems")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(a(s)("clearSentItemsTip")), 1)
]),
_: 1
}, 8, [
"show",
"title"
]),
e(me, {
show: C.value,
"onUpdate:show": j[5] || (j[5] = (F) => C.value = F),
preset: "dialog",
title: a(s)("resetPassword")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: he,
size: "small",
tertiary: "",
type: "info"
}, {
default: t(() => [
m(o(a(s)("resetPassword")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
e(Re, {
label: a(s)("newPassword")
}, {
default: t(() => [
e(fe, {
value: u.value,
"onUpdate:value": j[4] || (j[4] = (F) => u.value = F),
type: "password",
placeholder: "",
"show-password-on": "click"
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
}, 8, [
"show",
"title"
]),
e(Me, {
style: {
"margin-bottom": "10px"
}
}, {
default: t(() => [
e(fe, {
value: I.value,
"onUpdate:value": j[6] || (j[6] = (F) => I.value = F),
clearable: "",
placeholder: a(s)("addressQueryTip"),
onKeydown: Ge(oe, [
"enter"
])
}, null, 8, [
"value",
"placeholder"
]),
e(a(O), {
onClick: oe,
type: "primary",
tertiary: ""
}, {
default: t(() => [
m(o(a(s)("query")), 1)
]),
_: 1
})
]),
_: 1
}),
A.value ? (E(), X($e, {
key: 0,
style: {
"margin-bottom": "10px"
}
}, {
default: t(() => [
e(a(O), {
onClick: z,
tertiary: ""
}, {
default: t(() => [
m(o(a(s)("selectAll")), 1)
]),
_: 1
}),
e(a(O), {
onClick: ce,
tertiary: ""
}, {
default: t(() => [
m(o(a(s)("unselectAll")), 1)
]),
_: 1
}),
e(ve, {
onPositiveClick: je
}, {
trigger: t(() => [
e(a(O), {
tertiary: "",
type: "error"
}, {
default: t(() => [
m(o(a(s)("multiDelete")), 1)
]),
_: 1
})
]),
default: t(() => [
m(" " + o(a(s)("multiDeleteTip")), 1)
]),
_: 1
}),
e(ve, {
onPositiveClick: ye
}, {
trigger: t(() => [
e(a(O), {
tertiary: "",
type: "warning"
}, {
default: t(() => [
m(o(a(s)("multiClearInbox")), 1)
]),
_: 1
})
]),
default: t(() => [
m(" " + o(a(s)("multiClearInboxTip")), 1)
]),
_: 1
}),
e(ve, {
onPositiveClick: we
}, {
trigger: t(() => [
e(a(O), {
tertiary: "",
type: "warning"
}, {
default: t(() => [
m(o(a(s)("multiClearSentItems")), 1)
]),
_: 1
})
]),
default: t(() => [
m(" " + o(a(s)("multiClearSentItemsTip")), 1)
]),
_: 1
}),
e(Ae, {
type: "info"
}, {
default: t(() => [
m(o(a(s)("selectedItems")) + ": " + o(D.value), 1)
]),
_: 1
})
]),
_: 1
})) : Z("", true),
M("div", Fa, [
M("div", ja, [
e(h, {
page: k.value,
"onUpdate:page": j[7] || (j[7] = (F) => k.value = F),
"page-size": $.value,
"onUpdate:pageSize": j[8] || (j[8] = (F) => $.value = F),
"item-count": W.value,
"page-sizes": [
20,
50,
100
],
"show-size-picker": ""
}, {
prefix: t(({ itemCount: F }) => [
m(o(a(s)("itemCount")) + ": " + o(F), 1)
]),
_: 1
}, 8, [
"page",
"page-size",
"item-count"
])
]),
e(V, {
"checked-row-keys": b.value,
"onUpdate:checkedRowKeys": j[9] || (j[9] = (F) => b.value = F),
columns: J,
data: q.value,
bordered: false,
"row-key": (F) => F.id,
embedded: ""
}, null, 8, [
"checked-row-keys",
"data",
"row-key"
])
]),
e(me, {
show: w.value,
"onUpdate:show": j[10] || (j[10] = (F) => w.value = F),
preset: "dialog",
title: K.value,
"negative-text": "OK"
}, {
default: t(() => [
e($e, {
justify: "center"
}, {
default: t(() => [
e(G, {
type: "circle",
status: "info",
percentage: N.value.percentage
}, {
default: t(() => [
M("span", Wa, o(N.value.tip), 1)
]),
_: 1
}, 8, [
"percentage"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"show",
"title"
])
]);
};
}
};
Ka = ee(Ha, [
[
"__scopeId",
"data-v-05ab3412"
]
]);
Ga = {
class: "center"
};
Ja = {
__name: "CreateAccount",
setup(_) {
const { loading: d, openSettings: r } = ue(), l = ae(), { t: n } = te({
messages: {
en: {
address: "Address",
enablePrefix: "If enable Prefix",
creatNewEmail: "Create New Email",
fillInAllFields: "Please fill in all fields",
successTip: "Success Created",
addressCredential: "Mail Address Credential",
addressCredentialTip: "Please copy the Mail Address Credential and you can use it to login to your email account.",
addressPassword: "Address Password",
linkWithAddressCredential: "Open to auto login email link"
},
zh: {
address: "\u5730\u5740",
enablePrefix: "\u662F\u5426\u542F\u7528\u524D\u7F00",
creatNewEmail: "\u521B\u5EFA\u65B0\u90AE\u7BB1",
fillInAllFields: "\u8BF7\u586B\u5199\u5B8C\u6574\u4FE1\u606F",
successTip: "\u521B\u5EFA\u6210\u529F",
addressCredential: "\u90AE\u7BB1\u5730\u5740\u51ED\u8BC1",
addressCredentialTip: "\u8BF7\u590D\u5236\u90AE\u7BB1\u5730\u5740\u51ED\u8BC1\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u5B83\u767B\u5F55\u4F60\u7684\u90AE\u7BB1\u3002",
addressPassword: "\u5730\u5740\u5BC6\u7801",
linkWithAddressCredential: "\u6253\u5F00\u5373\u53EF\u81EA\u52A8\u767B\u5F55\u90AE\u7BB1\u7684\u94FE\u63A5"
}
}
}), v = f(true), p = f(""), s = f(""), y = f(false), g = f(""), i = f(""), c = f(""), x = async () => {
if (!p.value || !s.value) {
l.error(n("fillInAllFields"));
return;
}
try {
const L = await P.fetch("/admin/new_address", {
method: "POST",
body: JSON.stringify({
enablePrefix: v.value,
name: p.value,
domain: s.value
})
});
g.value = L.jwt, i.value = L.password || "", c.value = L.address || "", l.success(n("successTip")), y.value = true;
} catch (L) {
l.error(L.message || "error");
}
}, C = () => `${window.location.origin}/?jwt=${g.value}`;
return le(async () => {
var _a2, _b;
r.prefix && (v.value = true), s.value = ((_b = (_a2 = r.value.domains) == null ? void 0 : _a2[0]) == null ? void 0 : _b.value) || "";
}), (L, u) => {
const b = de, w = Et, N = Pt, K = Ee, D = Fe, A = ge, I = la, q = pe, W = re, k = Ce, $ = O;
return E(), Q("div", Ga, [
e(K, {
show: y.value,
"onUpdate:show": u[0] || (u[0] = (B) => y.value = B),
preset: "dialog",
title: a(n)("addressCredential")
}, {
default: t(() => [
M("span", null, [
M("p", null, o(a(n)("addressCredentialTip")), 1)
]),
e(b, {
embedded: ""
}, {
default: t(() => [
M("b", null, o(g.value), 1)
]),
_: 1
}),
i.value ? (E(), X(b, {
key: 0,
embedded: ""
}, {
default: t(() => [
M("p", null, [
M("b", null, o(c.value), 1)
]),
M("p", null, [
m(o(a(n)("addressPassword")) + ": ", 1),
M("b", null, o(i.value), 1)
])
]),
_: 1
})) : Z("", true),
e(b, {
embedded: ""
}, {
default: t(() => [
e(N, null, {
default: t(() => [
e(w, {
title: a(n)("linkWithAddressCredential")
}, {
default: t(() => [
e(b, {
embedded: ""
}, {
default: t(() => [
M("b", null, o(C()), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"title"
])
]),
_: 1
})
]),
_: 1
})
]),
_: 1
}, 8, [
"show",
"title"
]),
e(b, {
bordered: false,
embedded: "",
style: {
"max-width": "600px"
}
}, {
default: t(() => [
a(r).prefix ? (E(), X(A, {
key: 0,
label: a(n)("enablePrefix")
}, {
default: t(() => [
e(D, {
value: v.value,
"onUpdate:value": u[1] || (u[1] = (B) => v.value = B),
round: false
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
])) : Z("", true),
e(A, {
label: a(n)("address")
}, {
default: t(() => [
e(k, null, {
default: t(() => [
v.value && a(r).prefix ? (E(), X(I, {
key: 0
}, {
default: t(() => [
m(o(a(r).prefix), 1)
]),
_: 1
})) : Z("", true),
e(q, {
value: p.value,
"onUpdate:value": u[2] || (u[2] = (B) => p.value = B)
}, null, 8, [
"value"
]),
e(I, null, {
default: t(() => [
...u[4] || (u[4] = [
m("@", -1)
])
]),
_: 1
}),
e(W, {
value: s.value,
"onUpdate:value": u[3] || (u[3] = (B) => s.value = B),
"consistent-menu-width": false,
options: a(r).domains
}, null, 8, [
"value",
"options"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e($, {
onClick: x,
type: "primary",
block: "",
loading: a(d)
}, {
default: t(() => [
m(o(a(n)("creatNewEmail")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
})
]);
};
}
};
Qa = ee(Ja, [
[
"__scopeId",
"data-v-22702c12"
]
]);
Xa = {
class: "center"
};
Za = 200;
Ya = {
__name: "AccountSettings",
setup(_) {
const { loading: d, openSettings: r } = ue(), l = ae(), { t: n } = te({
messages: {
en: {
tip: "You can manually input the following multiple select input and enter",
manualInputPrompt: "Type and press Enter to add",
save: "Save",
successTip: "Save Success",
address_block_list: "Address Block Keywords for Users(Admin can skip)",
address_block_list_placeholder: "Please enter the keywords you want to block",
send_address_block_list: "Address Block Keywords for send email",
noLimitSendAddressList: "No Balance Limit Send Address List",
verified_address_list: "Verified Address List(Can send email by cf internal api)",
fromBlockList: "Block Keywords for receive email",
block_receive_unknow_address_email: "Block receive unknow address email",
email_forwarding_config: "Email Forwarding Configuration",
domain_list: "Domain List (Optional)",
forward_address: "Forward Address",
actions: "Actions",
select_domain: "Select Domain",
forward_placeholder: "forward@example.com",
delete_rule: "Delete",
delete_rule_confirm: "Are you sure you want to delete this rule?",
delete_success: "Delete Success",
forwarding_rule_warning: "Each rule will run independently. Forward address needs to be a verified address.",
add: "Add",
cancel: "Cancel",
config: "Config",
source_patterns: "Source Address Regex (Optional)",
source_patterns_placeholder: "e.g. gmail.com",
source_match_mode: "Match Mode",
match_any: "Any",
match_all: "All",
source_patterns_tip: "Domain list filters by recipient address, source regex filters by sender address. Both conditions must match for forwarding (AND logic). Leave either empty to skip that filter.",
regex_too_long: "Regex pattern too long (max 200 characters)",
regex_invalid: "Invalid regex pattern",
forward_address_required: "Forward address is required",
rule_index: "Rule"
},
zh: {
tip: "\u60A8\u53EF\u4EE5\u624B\u52A8\u8F93\u5165\u4EE5\u4E0B\u591A\u9009\u8F93\u5165\u6846, \u56DE\u8F66\u589E\u52A0",
manualInputPrompt: "\u8F93\u5165\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
save: "\u4FDD\u5B58",
successTip: "\u4FDD\u5B58\u6210\u529F",
address_block_list: "\u90AE\u4EF6\u5730\u5740\u5C4F\u853D\u5173\u952E\u8BCD(\u7BA1\u7406\u5458\u53EF\u8DF3\u8FC7\u68C0\u67E5)",
address_block_list_placeholder: "\u8BF7\u8F93\u5165\u60A8\u60F3\u8981\u5C4F\u853D\u7684\u5173\u952E\u8BCD",
send_address_block_list: "\u53D1\u9001\u90AE\u4EF6\u5730\u5740\u5C4F\u853D\u5173\u952E\u8BCD",
noLimitSendAddressList: "\u65E0\u4F59\u989D\u9650\u5236\u53D1\u9001\u5730\u5740\u5217\u8868",
verified_address_list: "\u5DF2\u9A8C\u8BC1\u5730\u5740\u5217\u8868(\u53EF\u901A\u8FC7 cf \u5185\u90E8 api \u53D1\u9001\u90AE\u4EF6)",
fromBlockList: "\u63A5\u6536\u90AE\u4EF6\u5730\u5740\u5C4F\u853D\u5173\u952E\u8BCD",
block_receive_unknow_address_email: "\u7981\u6B62\u63A5\u6536\u672A\u77E5\u5730\u5740\u90AE\u4EF6",
email_forwarding_config: "\u90AE\u4EF6\u8F6C\u53D1\u914D\u7F6E",
domain_list: "\u57DF\u540D\u5217\u8868\uFF08\u53EF\u9009\uFF09",
forward_address: "\u8F6C\u53D1\u5730\u5740",
actions: "\u64CD\u4F5C",
select_domain: "\u9009\u62E9\u57DF\u540D",
forward_placeholder: "forward@example.com",
delete_rule: "\u5220\u9664",
delete_rule_confirm: "\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u6761\u89C4\u5219\u5417\uFF1F",
delete_success: "\u5220\u9664\u6210\u529F",
forwarding_rule_warning: "\u6BCF\u6761\u89C4\u5219\u72EC\u7ACB\u8FD0\u884C\uFF0C\u8F6C\u53D1\u5730\u5740\u9700\u8981\u4E3A\u5DF2\u9A8C\u8BC1\u7684\u5730\u5740\u3002",
add: "\u6DFB\u52A0",
cancel: "\u53D6\u6D88",
config: "\u914D\u7F6E",
source_patterns: "\u6765\u6E90\u5730\u5740\u6B63\u5219\uFF08\u53EF\u9009\uFF09",
source_patterns_placeholder: "\u4F8B\u5982: gmail.com",
source_match_mode: "\u5339\u914D\u6A21\u5F0F",
match_any: "\u4EFB\u4E00",
match_all: "\u5168\u90E8",
source_patterns_tip: "\u57DF\u540D\u5217\u8868\u6309\u6536\u4EF6\u5730\u5740\u8FC7\u6EE4\uFF0C\u6765\u6E90\u6B63\u5219\u6309\u53D1\u4EF6\u5730\u5740\u8FC7\u6EE4\uFF0C\u4E24\u8005\u5747\u4E3A\u53EF\u9009\u3002\u540C\u65F6\u914D\u7F6E\u65F6\u9700\u540C\u65F6\u6EE1\u8DB3\uFF08AND \u903B\u8F91\uFF09\uFF0C\u7559\u7A7A\u5219\u8DF3\u8FC7\u8BE5\u6761\u4EF6\u3002",
regex_too_long: "\u6B63\u5219\u8868\u8FBE\u5F0F\u8FC7\u957F\uFF08\u6700\u5927200\u5B57\u7B26\uFF09",
regex_invalid: "\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F",
forward_address_required: "\u8F6C\u53D1\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A",
rule_index: "\u89C4\u5219"
}
}
}), v = f([]), p = f([]), s = f([]), y = f([]), g = f([]), i = f({
blockReceiveUnknowAddressEmail: false,
emailForwardingList: []
}), c = f(false), x = f([]), C = [
{
title: n("domain_list"),
key: "domains",
render: (D, A) => {
var _a2;
return U(re, {
value: Array.isArray(D.domains) ? D.domains : [],
onUpdateValue: (I) => {
x.value[A].domains = I;
},
options: ((_a2 = r.value) == null ? void 0 : _a2.domains) || [],
multiple: true,
filterable: true,
tag: true,
placeholder: n("select_domain")
});
}
},
{
title: n("source_patterns"),
key: "sourcePatterns",
render: (D, A) => U("div", {
style: "display: flex; flex-direction: column; gap: 4px;"
}, [
U(re, {
value: Array.isArray(D.sourcePatterns) ? D.sourcePatterns : [],
onUpdateValue: (I) => {
x.value[A].sourcePatterns = I;
},
multiple: true,
filterable: true,
tag: true,
placeholder: n("source_patterns_placeholder")
}, {
empty: () => U("span", {
style: "color: #999; font-size: 12px;"
}, n("manualInputPrompt"))
}),
U(Dt, {
value: D.sourceMatchMode || "any",
onUpdateValue: (I) => {
x.value[A].sourceMatchMode = I;
},
size: "small",
style: "margin-top: 4px;"
}, {
default: () => [
U(ft, {
value: "any"
}, {
default: () => n("match_any")
}),
U(ft, {
value: "all"
}, {
default: () => n("match_all")
})
]
})
])
},
{
title: n("forward_address"),
key: "forward",
render: (D, A) => U(pe, {
value: D.forward,
onUpdateValue: (I) => {
x.value[A].forward = I;
},
placeholder: "forward@example.com"
})
},
{
title: n("actions"),
key: "actions",
render: (D, A) => U("div", {
style: "display: flex; gap: 8px;"
}, [
U(Ye, {
onPositiveClick: () => {
x.value = x.value.filter((I, q) => q !== A), l.success(n("delete_success"));
}
}, {
default: () => n("delete_rule_confirm"),
trigger: () => U(O, {
size: "small",
type: "error"
}, {
default: () => n("delete_rule")
})
})
])
}
], L = () => {
x.value = i.value.emailForwardingList ? [
...i.value.emailForwardingList
] : [], c.value = true;
}, u = () => {
x.value = [
...x.value,
{
domains: [],
forward: "",
sourcePatterns: [],
sourceMatchMode: "any"
}
];
}, b = () => {
for (let D = 0; D < x.value.length; D++) {
const A = x.value[D];
if (!A.forward || A.forward.trim() === "") return l.error(`${n("forward_address_required")} (${n("rule_index")} ${D + 1})`), false;
if (A.sourcePatterns && A.sourcePatterns.length > 0) for (const I of A.sourcePatterns) {
if (I.length > Za) return l.error(`${n("regex_too_long")}: ${I.substring(0, 30)}...`), false;
try {
new RegExp(I, "i");
} catch {
return l.error(`${n("regex_invalid")}: ${I}`), false;
}
}
}
return true;
}, w = () => {
b() && (i.value.emailForwardingList = [
...x.value
], c.value = false);
}, N = async () => {
var _a2, _b;
try {
const D = await P.fetch("/admin/account_settings");
v.value = D.blockList || [], p.value = D.sendBlockList || [], y.value = D.verifiedAddressList || [], g.value = D.fromBlockList || [], s.value = D.noLimitSendAddressList || [], i.value = {
blockReceiveUnknowAddressEmail: ((_a2 = D.emailRuleSettings) == null ? void 0 : _a2.blockReceiveUnknowAddressEmail) || false,
emailForwardingList: ((_b = D.emailRuleSettings) == null ? void 0 : _b.emailForwardingList) || []
};
} catch (D) {
l.error(D.message || "error");
}
}, K = async () => {
try {
await P.fetch("/admin/account_settings", {
method: "POST",
body: JSON.stringify({
blockList: v.value || [],
sendBlockList: p.value || [],
verifiedAddressList: y.value || [],
fromBlockList: g.value || [],
noLimitSendAddressList: s.value || [],
emailRuleSettings: i.value
})
}), l.success(n("successTip"));
} catch (D) {
l.error(D.message || "error");
}
};
return le(async () => {
await N();
}), (D, A) => {
const I = Ue, q = De, W = Le, k = ge, $ = Fe, B = de, Y = Ve, se = qe, _e = Ee;
return E(), Q(it, null, [
M("div", Xa, [
e(B, {
bordered: false,
embedded: "",
style: {
"max-width": "600px"
}
}, {
default: t(() => [
e(I, {
"show-icon": false,
bordered: false,
type: "warning",
style: {
"margin-bottom": "10px"
}
}, {
default: t(() => [
M("span", null, o(a(n)("tip")), 1)
]),
_: 1
}),
e(q, {
justify: "end"
}, {
default: t(() => [
e(a(O), {
onClick: K,
type: "primary",
loading: a(d)
}, {
default: t(() => [
m(o(a(n)("save")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
}),
e(k, {
label: a(n)("address_block_list")
}, {
default: t(() => [
e(a(re), {
value: v.value,
"onUpdate:value": A[0] || (A[0] = (S) => v.value = S),
filterable: "",
multiple: "",
tag: "",
placeholder: a(n)("address_block_list_placeholder")
}, {
empty: t(() => [
e(W, {
depth: "3"
}, {
default: t(() => [
m(o(a(n)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
]),
e(k, {
label: a(n)("send_address_block_list")
}, {
default: t(() => [
e(a(re), {
value: p.value,
"onUpdate:value": A[1] || (A[1] = (S) => p.value = S),
filterable: "",
multiple: "",
tag: "",
placeholder: a(n)("address_block_list_placeholder")
}, {
empty: t(() => [
e(W, {
depth: "3"
}, {
default: t(() => [
m(o(a(n)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
]),
e(k, {
label: a(n)("noLimitSendAddressList")
}, {
default: t(() => [
e(a(re), {
value: s.value,
"onUpdate:value": A[2] || (A[2] = (S) => s.value = S),
filterable: "",
multiple: "",
tag: "",
placeholder: a(n)("noLimitSendAddressList")
}, {
empty: t(() => [
e(W, {
depth: "3"
}, {
default: t(() => [
m(o(a(n)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
]),
e(k, {
label: a(n)("verified_address_list")
}, {
default: t(() => [
e(a(re), {
value: y.value,
"onUpdate:value": A[3] || (A[3] = (S) => y.value = S),
filterable: "",
multiple: "",
tag: "",
placeholder: a(n)("verified_address_list")
}, {
empty: t(() => [
e(W, {
depth: "3"
}, {
default: t(() => [
m(o(a(n)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
]),
e(k, {
label: a(n)("fromBlockList")
}, {
default: t(() => [
e(a(re), {
value: g.value,
"onUpdate:value": A[4] || (A[4] = (S) => g.value = S),
filterable: "",
multiple: "",
tag: "",
placeholder: a(n)("fromBlockList")
}, {
empty: t(() => [
e(W, {
depth: "3"
}, {
default: t(() => [
m(o(a(n)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
]),
e(k, {
label: a(n)("block_receive_unknow_address_email")
}, {
default: t(() => [
e($, {
value: i.value.blockReceiveUnknowAddressEmail,
"onUpdate:value": A[5] || (A[5] = (S) => i.value.blockReceiveUnknowAddressEmail = S),
round: false
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
]),
e(k, {
label: a(n)("email_forwarding_config")
}, {
default: t(() => [
e(a(O), {
onClick: L
}, {
default: t(() => [
m(o(a(n)("config")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
})
]),
e(_e, {
show: c.value,
"onUpdate:show": A[6] || (A[6] = (S) => c.value = S),
preset: "card",
title: a(n)("email_forwarding_config"),
style: {
"max-width": "1000px"
}
}, {
default: t(() => [
e(Y, {
vertical: ""
}, {
default: t(() => [
e(I, {
"show-icon": false,
bordered: false,
type: "warning"
}, {
default: t(() => [
M("span", null, o(a(n)("forwarding_rule_warning")), 1),
A[7] || (A[7] = M("br", null, null, -1)),
M("span", null, o(a(n)("source_patterns_tip")), 1)
]),
_: 1
}),
e(Y, {
justify: "end"
}, {
default: t(() => [
e(a(O), {
onClick: u
}, {
default: t(() => [
m(o(a(n)("add")), 1)
]),
_: 1
})
]),
_: 1
}),
e(se, {
columns: C,
data: x.value,
bordered: false,
striped: ""
}, null, 8, [
"data"
]),
e(Y, {
justify: "end"
}, {
default: t(() => [
e(a(O), {
onClick: w,
type: "primary"
}, {
default: t(() => [
m(o(a(n)("save")), 1)
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]),
_: 1
}, 8, [
"show",
"title"
])
], 64);
};
}
};
wt = ee(Ya, [
[
"__scopeId",
"data-v-e681a103"
]
]);
el = {
style: {
overflow: "auto"
}
};
tl = {
__name: "UserAddressManagement",
props: {
user_id: {
type: Number,
required: true
}
},
setup(_) {
const d = _, r = ae(), { locale: l, t: n } = te({
messages: {
en: {
success: "success",
name: "Name",
mail_count: "Mail Count",
send_count: "Send Count"
},
zh: {
success: "\u6210\u529F",
name: "\u540D\u79F0",
mail_count: "\u90AE\u4EF6\u6570\u91CF",
send_count: "\u53D1\u9001\u6570\u91CF"
}
}
}), v = f([]), p = async () => {
try {
const { results: y } = await P.fetch(`/admin/users/bind_address/${d.user_id}`);
v.value = y;
} catch (y) {
console.log(y), r.error(y.message || "error");
}
}, s = [
{
title: n("name"),
key: "name"
},
{
title: n("mail_count"),
key: "mail_count",
render(y) {
return U(He, {
value: y.mail_count,
"show-zero": true,
max: 99,
type: "success"
});
}
},
{
title: n("send_count"),
key: "send_count",
render(y) {
return U(He, {
value: y.send_count,
"show-zero": true,
max: 99,
type: "success"
});
}
}
];
return le(async () => {
await p();
}), (y, g) => {
const i = qe;
return E(), Q("div", el, [
e(i, {
columns: s,
data: v.value,
bordered: false,
embedded: ""
}, null, 8, [
"data"
])
]);
};
}
};
al = ee(tl, [
[
"__scopeId",
"data-v-b33d0779"
]
]);
ll = {
style: {
"margin-top": "10px"
}
};
nl = {
style: {
overflow: "auto"
}
};
sl = {
style: {
display: "inline-block"
}
};
ol = {
__name: "UserManagement",
setup(_) {
const { loading: d, openSettings: r } = ue(), l = ae(), { t: n } = te({
messages: {
en: {
success: "Success",
user_email: "User Email",
role: "Role",
address_count: "Address Count",
created_at: "Created At",
actions: "Actions",
query: "Query",
itemCount: "itemCount",
deleteUser: "Delete User",
delete: "Delete",
deleteUserTip: "Are you sure you want to delete this user?",
resetPassword: "Reset Password",
pleaseInput: "Please input complete information",
createUser: "Create User",
email: "Email",
password: "Password",
changeRole: "Change Role",
prefix: "Prefix",
domains: "Domains",
roleDonotExist: "Current Role does not exist",
userAddressManagement: "Address Management"
},
zh: {
success: "\u6210\u529F",
user_email: "\u7528\u6237\u90AE\u7BB1",
role: "\u89D2\u8272",
address_count: "\u5730\u5740\u6570\u91CF",
created_at: "\u521B\u5EFA\u65F6\u95F4",
actions: "\u64CD\u4F5C",
query: "\u67E5\u8BE2",
itemCount: "\u603B\u6570",
deleteUser: "\u5220\u9664\u7528\u6237",
delete: "\u5220\u9664",
deleteUserTip: "\u786E\u5B9A\u8981\u5220\u9664\u6B64\u7528\u6237\u5417\uFF1F",
resetPassword: "\u91CD\u7F6E\u5BC6\u7801",
pleaseInput: "\u8BF7\u8F93\u5165\u5B8C\u6574\u4FE1\u606F",
createUser: "\u521B\u5EFA\u7528\u6237",
email: "\u90AE\u7BB1",
password: "\u5BC6\u7801",
changeRole: "\u66F4\u6539\u89D2\u8272",
prefix: "\u524D\u7F00",
domains: "\u57DF\u540D",
roleDonotExist: "\u5F53\u524D\u89D2\u8272\u4E0D\u5B58\u5728",
userAddressManagement: "\u5730\u5740\u7BA1\u7406"
}
}
}), v = f([]), p = f(0), s = f(1), y = f(20), g = f(""), i = f(false), c = f(""), x = f(false), C = f(0), L = f(false), u = f({
email: "",
password: ""
}), b = f(false), w = f(false), N = f([]), K = f(""), D = xe(() => N.value.map((S) => ({
label: S.role,
value: S.role
}))), A = async () => {
try {
const S = await P.fetch("/admin/user_roles");
N.value = S;
} catch (S) {
console.log(S), l.error(S.message || "error");
}
}, I = async () => {
try {
g.value = g.value.trim();
const { results: S, count: R } = await P.fetch(`/admin/users?limit=${y.value}&offset=${(s.value - 1) * y.value}` + (g.value ? `&query=${g.value}` : ""));
v.value = S, R > 0 && (p.value = R);
} catch (S) {
console.log(S), l.error(S.message || "error");
}
}, q = async () => {
if (!c.value) {
l.error(n("pleaseInput"));
return;
}
try {
await P.fetch(`/admin/users/${C.value}/reset_password`, {
method: "POST",
body: JSON.stringify({
password: await vt(c.value)
})
}), l.success(n("success")), i.value = false;
} catch (S) {
console.log(S), l.error(S.message || "error");
}
}, W = async () => {
if (!u.value.email || !u.value.password) {
l.error(n("pleaseInput"));
return;
}
try {
await P.fetch("/admin/users", {
method: "POST",
body: JSON.stringify({
email: u.value.email,
password: await vt(u.value.password)
})
}), l.success(n("success")), await I(), L.value = false;
} catch (S) {
console.log(S), l.error(S.message || "error");
}
}, k = async () => {
try {
await P.fetch(`/admin/users/${C.value}`, {
method: "DELETE"
}), l.success(n("success")), x.value = false;
} catch (S) {
console.log(S), l.error(S.message || "error");
}
}, $ = async () => {
try {
await P.fetch("/admin/user_roles", {
method: "POST",
body: JSON.stringify({
user_id: C.value,
role_text: K.value
})
}), l.success(n("success")), b.value = false, await I();
} catch (S) {
console.log(S), l.error(S.message || "error");
}
}, B = [
{
title: "ID",
key: "id"
},
{
title: n("user_email"),
key: "user_email"
},
{
title: n("role"),
key: "role_text",
render(S) {
return S.role_text ? U(rt, {
bordered: false,
type: "info"
}, {
default: () => S.role_text
}) : null;
}
},
{
title: n("address_count"),
key: "address_count",
render(S) {
return U(O, {
text: true,
onClick: () => {
S.address_count <= 0 || (C.value = S.id, w.value = true);
}
}, {
icon: () => U(He, {
value: S.address_count,
"show-zero": true,
max: 99,
type: "success"
}),
default: () => S.address_count > 0 ? n("userAddressManagement") : ""
});
}
},
{
title: n("created_at"),
key: "created_at"
},
{
title: n("actions"),
key: "actions",
render(S) {
return U("div", [
U(Mt, {
mode: "horizontal",
options: [
{
label: n("actions"),
icon: () => U(Tt),
key: "action",
children: [
{
label: () => U(O, {
text: true,
onClick: () => {
C.value = S.id, w.value = true;
}
}, {
default: () => n("userAddressManagement")
}),
show: S.address_count > 0
},
{
label: () => U(O, {
text: true,
onClick: () => {
C.value = S.id, K.value = S.role_text, b.value = true;
}
}, {
default: () => n("changeRole")
})
},
{
label: () => U(O, {
text: true,
onClick: () => {
C.value = S.id, c.value = "", i.value = true;
}
}, {
default: () => n("resetPassword")
})
},
{
label: () => U(O, {
text: true,
onClick: () => {
C.value = S.id, u.value.email = "", u.value.password = "", x.value = true;
}
}, {
default: () => n("delete")
})
}
]
}
]
})
]);
}
}
], Y = (S) => {
var _a2;
const R = (_a2 = N.value.find((ne) => ne.role === S)) == null ? void 0 : _a2.prefix;
return R ?? r.value.prefix;
}, se = (S) => {
var _a2;
const R = (_a2 = N.value.find((ne) => ne.role === S)) == null ? void 0 : _a2.domains;
return R == null || R.length == 0 ? r.value.defaultDomains : R;
}, _e = xe(() => K.value && !N.value.some((S) => S.role === K.value));
return Ze([
s,
y
], async () => {
await I();
}), le(async () => {
await A(), await I();
}), (S, R) => {
const ne = pe, he = ge, z = et, ce = Ee, H = Ue, je = re, ye = Ce, we = st, oe = qe;
return E(), Q("div", ll, [
e(ce, {
show: L.value,
"onUpdate:show": R[2] || (R[2] = (J) => L.value = J),
preset: "dialog",
title: a(n)("createUser")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: W,
size: "small",
tertiary: "",
type: "primary"
}, {
default: t(() => [
m(o(a(n)("createUser")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
e(z, null, {
default: t(() => [
e(he, {
label: a(n)("email"),
required: ""
}, {
default: t(() => [
e(ne, {
value: u.value.email,
"onUpdate:value": R[0] || (R[0] = (J) => u.value.email = J)
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
]),
e(he, {
label: a(n)("password"),
required: ""
}, {
default: t(() => [
e(ne, {
value: u.value.password,
"onUpdate:value": R[1] || (R[1] = (J) => u.value.password = J),
type: "password",
"show-password-on": "click"
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"show",
"title"
]),
e(ce, {
show: i.value,
"onUpdate:show": R[4] || (R[4] = (J) => i.value = J),
preset: "dialog",
title: a(n)("resetPassword")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: q,
size: "small",
tertiary: "",
type: "primary"
}, {
default: t(() => [
m(o(a(n)("resetPassword")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
e(he, {
label: a(n)("password"),
required: ""
}, {
default: t(() => [
e(ne, {
value: c.value,
"onUpdate:value": R[3] || (R[3] = (J) => c.value = J),
type: "password",
"show-password-on": "click"
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
}, 8, [
"show",
"title"
]),
e(ce, {
show: x.value,
"onUpdate:show": R[5] || (R[5] = (J) => x.value = J),
preset: "dialog",
title: a(n)("deleteUser")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: k,
size: "small",
tertiary: "",
type: "error"
}, {
default: t(() => [
m(o(a(n)("deleteUser")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(a(n)("deleteUserTip")), 1)
]),
_: 1
}, 8, [
"show",
"title"
]),
e(ce, {
show: b.value,
"onUpdate:show": R[7] || (R[7] = (J) => b.value = J),
preset: "dialog",
title: a(n)("changeRole")
}, {
action: t(() => [
e(a(O), {
loading: a(d),
onClick: $,
size: "small",
tertiary: "",
type: "primary"
}, {
default: t(() => [
m(o(a(n)("changeRole")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
_e.value ? (E(), X(H, {
key: 0,
type: "error",
bordered: false
}, {
default: t(() => [
M("span", null, o(a(n)("roleDonotExist")), 1)
]),
_: 1
})) : Z("", true),
M("p", null, o(a(n)("prefix") + ": " + Y(K.value)), 1),
M("p", null, o(a(n)("domains") + ": " + JSON.stringify(se(K.value))), 1),
e(je, {
clearable: "",
value: K.value,
"onUpdate:value": R[6] || (R[6] = (J) => K.value = J),
options: D.value
}, null, 8, [
"value",
"options"
])
]),
_: 1
}, 8, [
"show",
"title"
]),
e(ce, {
show: w.value,
"onUpdate:show": R[8] || (R[8] = (J) => w.value = J),
preset: "card",
title: a(n)("userAddressManagement")
}, {
default: t(() => [
e(al, {
user_id: C.value
}, null, 8, [
"user_id"
])
]),
_: 1
}, 8, [
"show",
"title"
]),
e(ye, null, {
default: t(() => [
e(ne, {
value: g.value,
"onUpdate:value": R[9] || (R[9] = (J) => g.value = J),
onKeydown: Ge(I, [
"enter"
])
}, null, 8, [
"value"
]),
e(a(O), {
onClick: I,
type: "primary",
tertiary: ""
}, {
default: t(() => [
m(o(a(n)("query")), 1)
]),
_: 1
})
]),
_: 1
}),
M("div", nl, [
M("div", sl, [
e(we, {
page: s.value,
"onUpdate:page": R[11] || (R[11] = (J) => s.value = J),
"page-size": y.value,
"onUpdate:pageSize": R[12] || (R[12] = (J) => y.value = J),
"item-count": p.value,
"page-sizes": [
20,
50,
100
],
"show-size-picker": ""
}, {
prefix: t(({ itemCount: J }) => [
m(o(a(n)("itemCount")) + ": " + o(J), 1)
]),
suffix: t(() => [
e(a(O), {
onClick: R[10] || (R[10] = (J) => L.value = true),
size: "small",
tertiary: "",
type: "primary",
style: {
"margin-left": "10px"
}
}, {
default: t(() => [
m(o(a(n)("createUser")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"page",
"page-size",
"item-count"
])
]),
e(oe, {
columns: B,
data: v.value,
bordered: false,
embedded: ""
}, null, 8, [
"data"
])
])
]);
};
}
};
rl = ee(ol, [
[
"__scopeId",
"data-v-9bf893ed"
]
]);
il = {
class: "center"
};
ul = {
__name: "UserSettings",
setup(_) {
const { loading: d } = ue(), r = ae(), { t: l } = te({
messages: {
en: {
save: "Save",
successTip: "Save Success",
enable: "Enable",
enableUserRegister: "Allow User Register",
enableMailVerify: "Enable Mail Verify (Send address must be an address in the system with a balance and can send mail normally)",
verifyMailSender: "Verify Mail Sender",
enableMailAllowList: "Enable Mail Address Allow List(Manually enterable)",
manualInputPrompt: "Type and press Enter to add",
mailAllowList: "Mail Address Allow List",
maxAddressCount: "Maximum number of email addresses that can be binded",
emailCheckRegex: "Email Check Regex (e.g. ^[^.]+@.+$ to disallow dots before @)",
enableEmailCheckRegex: "Enable Email Check Regex"
},
zh: {
save: "\u4FDD\u5B58",
successTip: "\u4FDD\u5B58\u6210\u529F",
enable: "\u542F\u7528",
enableUserRegister: "\u5141\u8BB8\u7528\u6237\u6CE8\u518C",
enableMailVerify: "\u542F\u7528\u90AE\u4EF6\u9A8C\u8BC1(\u53D1\u9001\u5730\u5740\u5FC5\u987B\u662F\u7CFB\u7EDF\u4E2D\u80FD\u6709\u4F59\u989D\u4E14\u80FD\u6B63\u5E38\u53D1\u9001\u90AE\u4EF6\u7684\u5730\u5740)",
verifyMailSender: "\u9A8C\u8BC1\u90AE\u4EF6\u53D1\u9001\u5730\u5740",
enableMailAllowList: "\u542F\u7528\u90AE\u4EF6\u5730\u5740\u767D\u540D\u5355(\u53EF\u624B\u52A8\u8F93\u5165, \u56DE\u8F66\u589E\u52A0)",
manualInputPrompt: "\u8F93\u5165\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
mailAllowList: "\u90AE\u4EF6\u5730\u5740\u767D\u540D\u5355",
maxAddressCount: "\u53EF\u7ED1\u5B9A\u6700\u5927\u90AE\u7BB1\u5730\u5740\u6570\u91CF",
emailCheckRegex: "\u90AE\u7BB1\u6B63\u5219\u6821\u9A8C (\u4F8B\u5982 ^[^.]+@.+$ \u7981\u6B62@\u524D\u9762\u6709.)",
enableEmailCheckRegex: "\u542F\u7528\u90AE\u7BB1\u6B63\u5219\u6821\u9A8C"
}
}
}), n = [
"gmail.com",
"163.com",
"126.com",
"qq.com",
"outlook.com",
"hotmail.com",
"icloud.com",
"yahoo.com",
"foxmail.com"
], v = n.map((g) => ({
label: g,
value: g
})), p = f({
enable: false,
enableMailVerify: false,
verifyMailSender: "",
enableMailAllowList: false,
mailAllowList: n,
maxAddressCount: 5,
enableEmailCheckRegex: false,
emailCheckRegex: ""
}), s = async () => {
try {
const g = await P.fetch("/admin/user_settings");
Object.assign(p.value, g);
} catch (g) {
r.error(g.message || "error");
}
}, y = async () => {
try {
await P.fetch("/admin/user_settings", {
method: "POST",
body: JSON.stringify(p.value)
}), r.success(l("successTip"));
} catch (g) {
r.error(g.message || "error");
}
};
return le(async () => {
await s();
}), (g, i) => {
const c = O, x = De, C = Fe, L = ge, u = Ke, b = pe, w = Ce, N = Le, K = re, D = Je, A = et, I = de;
return E(), Q("div", il, [
e(I, {
bordered: false,
embedded: "",
style: {
"max-width": "600px"
}
}, {
default: t(() => [
e(x, {
justify: "end"
}, {
default: t(() => [
e(c, {
onClick: y,
type: "primary",
loading: a(d)
}, {
default: t(() => [
m(o(a(l)("save")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
}),
e(A, {
model: p.value
}, {
default: t(() => [
e(L, {
label: a(l)("enableUserRegister")
}, {
default: t(() => [
e(C, {
value: p.value.enable,
"onUpdate:value": i[0] || (i[0] = (q) => p.value.enable = q),
round: false
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
]),
e(L, {
label: a(l)("enableMailVerify")
}, {
default: t(() => [
e(w, null, {
default: t(() => [
e(u, {
checked: p.value.enableMailVerify,
"onUpdate:checked": i[1] || (i[1] = (q) => p.value.enableMailVerify = q),
style: {
width: "20%"
}
}, {
default: t(() => [
m(o(a(l)("enable")), 1)
]),
_: 1
}, 8, [
"checked"
]),
p.value.enableMailVerify ? (E(), X(b, {
key: 0,
value: p.value.verifyMailSender,
"onUpdate:value": i[2] || (i[2] = (q) => p.value.verifyMailSender = q),
style: {
width: "80%"
},
placeholder: a(l)("verifyMailSender")
}, null, 8, [
"value",
"placeholder"
])) : Z("", true)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(L, {
label: a(l)("enableMailAllowList")
}, {
default: t(() => [
e(w, null, {
default: t(() => [
e(u, {
checked: p.value.enableMailAllowList,
"onUpdate:checked": i[3] || (i[3] = (q) => p.value.enableMailAllowList = q),
style: {
width: "20%"
}
}, {
default: t(() => [
m(o(a(l)("enable")), 1)
]),
_: 1
}, 8, [
"checked"
]),
p.value.enableMailAllowList ? (E(), X(K, {
key: 0,
value: p.value.mailAllowList,
"onUpdate:value": i[4] || (i[4] = (q) => p.value.mailAllowList = q),
filterable: "",
multiple: "",
tag: "",
style: {
width: "80%"
},
options: a(v),
placeholder: a(l)("mailAllowList")
}, {
empty: t(() => [
e(N, {
depth: "3"
}, {
default: t(() => [
m(o(a(l)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"options",
"placeholder"
])) : Z("", true)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(L, {
label: a(l)("maxAddressCount")
}, {
default: t(() => [
e(w, null, {
default: t(() => [
e(D, {
value: p.value.maxAddressCount,
"onUpdate:value": i[5] || (i[5] = (q) => p.value.maxAddressCount = q),
placeholder: a(l)("maxAddressCount")
}, null, 8, [
"value",
"placeholder"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(L, {
label: a(l)("enableEmailCheckRegex")
}, {
default: t(() => [
e(w, null, {
default: t(() => [
e(u, {
checked: p.value.enableEmailCheckRegex,
"onUpdate:checked": i[6] || (i[6] = (q) => p.value.enableEmailCheckRegex = q),
style: {
width: "20%"
}
}, {
default: t(() => [
m(o(a(l)("enable")), 1)
]),
_: 1
}, 8, [
"checked"
]),
p.value.enableEmailCheckRegex ? (E(), X(b, {
key: 0,
value: p.value.emailCheckRegex,
"onUpdate:value": i[7] || (i[7] = (q) => p.value.emailCheckRegex = q),
style: {
width: "80%"
},
placeholder: a(l)("emailCheckRegex")
}, null, 8, [
"value",
"placeholder"
])) : Z("", true)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
}, 8, [
"model"
])
]),
_: 1
})
]);
};
}
};
kt = ee(ul, [
[
"__scopeId",
"data-v-609cb7d1"
]
]);
dl = [
"gmail.com",
"163.com",
"126.com",
"qq.com",
"outlook.com",
"hotmail.com",
"icloud.com",
"yahoo.com",
"foxmail.com"
];
xt = {
COMMOM_MAIL: dl
};
cl = {
class: "center"
};
pl = [
"innerHTML"
];
ml = ie({
__name: "UserOauth2Settings",
setup(_) {
const { loading: d } = ue(), r = ae(), { t: l } = te({
messages: {
en: {
save: "Save",
delete: "Delete",
successTip: "Save Success",
enable: "Enable",
enableMailAllowList: "Enable Mail Address Allow List(Manually enterable)",
manualInputPrompt: "Type and press Enter to add",
mailAllowList: "Mail Address Allow List",
addOauth2: "Add Oauth2",
name: "Name",
icon: "Icon (SVG, please ensure trusted source)",
iconPreview: "Preview",
oauth2Type: "Oauth2 Type",
enableEmailFormat: "Enable Email Format",
userEmailFormat: "Email Regex Pattern",
userEmailReplace: "Replace Template",
userEmailFormatTip: "Use regex to transform email. Example: ^(.+)@old\\.com$ with $1@new.com",
tip: "Third-party login will automatically use the user's email to register an account (the same email will be regarded as the same account), this account is the same as the registered account, and you can also set the password through the forget password"
},
zh: {
save: "\u4FDD\u5B58",
delete: "\u5220\u9664",
successTip: "\u4FDD\u5B58\u6210\u529F",
enable: "\u542F\u7528",
enableMailAllowList: "\u542F\u7528\u90AE\u4EF6\u5730\u5740\u767D\u540D\u5355(\u53EF\u624B\u52A8\u8F93\u5165, \u56DE\u8F66\u589E\u52A0)",
manualInputPrompt: "\u8F93\u5165\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
mailAllowList: "\u90AE\u4EF6\u5730\u5740\u767D\u540D\u5355",
addOauth2: "\u6DFB\u52A0 Oauth2",
name: "\u540D\u79F0",
icon: "\u56FE\u6807 (SVG, \u8BF7\u786E\u4FDD\u6765\u6E90\u53EF\u4FE1)",
iconPreview: "\u9884\u89C8",
oauth2Type: "Oauth2 \u7C7B\u578B",
enableEmailFormat: "\u542F\u7528\u90AE\u7BB1\u683C\u5F0F\u8F6C\u6362",
userEmailFormat: "\u90AE\u7BB1\u6B63\u5219\u8868\u8FBE\u5F0F",
userEmailReplace: "\u66FF\u6362\u6A21\u677F",
userEmailFormatTip: "\u4F7F\u7528\u6B63\u5219\u8F6C\u6362\u90AE\u7BB1\u3002\u793A\u4F8B: ^(.+)@old\\.com$ \u914D\u5408 $1@new.com",
tip: "\u7B2C\u4E09\u65B9\u767B\u5F55\u4F1A\u81EA\u52A8\u4F7F\u7528\u7528\u6237\u90AE\u7BB1\u6CE8\u518C\u8D26\u53F7(\u90AE\u7BB1\u76F8\u540C\u5C06\u89C6\u4E3A\u540C\u4E00\u8D26\u53F7), \u6B64\u8D26\u53F7\u548C\u6CE8\u518C\u7684\u8D26\u53F7\u76F8\u540C, \u4E5F\u53EF\u4EE5\u901A\u8FC7\u5FD8\u8BB0\u5BC6\u7801\u8BBE\u7F6E\u5BC6\u7801"
}
}
}), n = {
github: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/></svg>',
linuxdo: '<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><g><path d="m7.44,0s.09,0,.13,0c.09,0,.19,0,.28,0,.14,0,.29,0,.43,0,.09,0,.18,0,.27,0q.12,0,.25,0t.26.08c.15.03.29.06.44.08,1.97.38,3.78,1.47,4.95,3.11.04.06.09.12.13.18.67.96,1.15,2.11,1.3,3.28q0,.19.09.26c0,.15,0,.29,0,.44,0,.04,0,.09,0,.13,0,.09,0,.19,0,.28,0,.14,0,.29,0,.43,0,.09,0,.18,0,.27,0,.08,0,.17,0,.25q0,.19-.08.26c-.03.15-.06.29-.08.44-.38,1.97-1.47,3.78-3.11,4.95-.06.04-.12.09-.18.13-.96.67-2.11,1.15-3.28,1.3q-.19,0-.26.09c-.15,0-.29,0-.44,0-.04,0-.09,0-.13,0-.09,0-.19,0-.28,0-.14,0-.29,0-.43,0-.09,0-.18,0-.27,0-.08,0-.17,0-.25,0q-.19,0-.26-.08c-.15-.03-.29-.06-.44-.08-1.97-.38-3.78-1.47-4.95-3.11q-.07-.09-.13-.18c-.67-.96-1.15-2.11-1.3-3.28q0-.19-.09-.26c0-.15,0-.29,0-.44,0-.04,0-.09,0-.13,0-.09,0-.19,0-.28,0-.14,0-.29,0-.43,0-.09,0-.18,0-.27,0-.08,0-.17,0-.25q0-.19.08-.26c.03-.15.06-.29.08-.44.38-1.97,1.47-3.78,3.11-4.95.06-.04.12-.09.18-.13C4.42.73,5.57.26,6.74.1,7,.07,7.15,0,7.44,0Z" fill="#EFEFEF"/><path d="m1.27,11.33h13.45c-.94,1.89-2.51,3.21-4.51,3.88-1.99.59-3.96.37-5.8-.57-1.25-.7-2.67-1.9-3.14-3.3Z" fill="#FEB005"/><path d="m12.54,1.99c.87.7,1.82,1.59,2.18,2.68H1.27c.87-1.74,2.33-3.13,4.2-3.78,2.44-.79,5-.47,7.07,1.1Z" fill="#1D1D1F"/></g></svg>',
authentik: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 2.18l7 3.12v4.7c0 4.83-3.23 9.36-7 10.57-3.77-1.21-7-5.74-7-10.57V6.3l7-3.12zM11 7v6h2V7h-2zm0 8v2h2v-2h-2z"/></svg>'
}, v = xt.COMMOM_MAIL.map((L) => ({
label: L,
value: L
})), p = f([]), s = f(false), y = f(""), g = f("custom"), i = async () => {
try {
const L = await P.fetch("/admin/user_oauth2_settings");
Object.assign(p.value, L);
} catch (L) {
r.error(L.message || "error");
}
}, c = async () => {
try {
await P.fetch("/admin/user_oauth2_settings", {
method: "POST",
body: JSON.stringify(p.value)
}), r.success(l("successTip"));
} catch (L) {
r.error(L.message || "error");
}
}, x = () => {
const u = {
github: {
authorizationURL: "https://github.com/login/oauth/authorize",
accessTokenURL: "https://github.com/login/oauth/access_token",
accessTokenFormat: "json",
userInfoURL: "https://api.github.com/user",
userEmailKey: "email",
scope: "user:email",
icon: n.github
},
linuxdo: {
authorizationURL: "https://connect.linux.do/oauth2/authorize",
accessTokenURL: "https://connect.linux.do/oauth2/token",
accessTokenFormat: "urlencoded",
userInfoURL: "https://connect.linux.do/api/user",
userEmailKey: "id",
scope: "user",
enableEmailFormat: true,
userEmailFormat: "^(.+)$",
userEmailReplace: "linux_do_$1@oauth.linux.do",
icon: n.linuxdo
},
authentik: {
authorizationURL: "https://youdomain/application/o/authorize/",
accessTokenURL: "https://youdomain/application/o/token/",
accessTokenFormat: "urlencoded",
userInfoURL: "https://youdomain/application/o/userinfo/",
userEmailKey: "email",
scope: "email openid",
icon: n.authentik
},
custom: {}
}[g.value] || {};
p.value.push({
name: y.value,
icon: "",
clientID: "",
clientSecret: "",
authorizationURL: "",
accessTokenURL: "",
accessTokenFormat: "",
userInfoURL: "",
userEmailKey: "",
redirectURL: `${window.location.origin}/user/oauth2/callback`,
logoutURL: "",
scope: "",
enableEmailFormat: false,
userEmailFormat: "",
userEmailReplace: "",
enableMailAllowList: false,
mailAllowList: xt.COMMOM_MAIL,
...u
}), y.value = "", s.value = false;
}, C = [
{
label: "json",
value: "json"
},
{
label: "urlencoded",
value: "urlencoded"
}
];
return le(async () => {
await i();
}), (L, u) => {
const b = pe, w = ge, N = na, K = Dt, D = et, A = O, I = Ee, q = Ue, W = De, k = ut, $ = Ye, B = re, Y = Ke, se = sa, _e = Le, S = Ce, R = Et, ne = Pt, he = de;
return E(), Q("div", cl, [
e(I, {
show: s.value,
"onUpdate:show": u[2] || (u[2] = (z) => s.value = z),
preset: "dialog",
title: a(l)("addOauth2")
}, {
action: t(() => [
e(A, {
loading: a(d),
onClick: x,
size: "small",
tertiary: "",
type: "primary"
}, {
default: t(() => [
m(o(a(l)("addOauth2")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
e(D, null, {
default: t(() => [
e(w, {
label: a(l)("name"),
required: ""
}, {
default: t(() => [
e(b, {
value: y.value,
"onUpdate:value": u[0] || (u[0] = (z) => y.value = z)
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
]),
e(w, {
label: a(l)("oauth2Type"),
required: ""
}, {
default: t(() => [
e(K, {
value: g.value,
"onUpdate:value": u[1] || (u[1] = (z) => g.value = z)
}, {
default: t(() => [
e(N, {
value: "github",
label: "Github"
}),
e(N, {
value: "linuxdo",
label: "Linux Do"
}),
e(N, {
value: "authentik",
label: "Authentik"
}),
e(N, {
value: "custom",
label: "Custom"
})
]),
_: 1
}, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"show",
"title"
]),
e(he, {
bordered: false,
embedded: "",
style: {
"max-width": "600px"
}
}, {
default: t(() => [
e(q, {
"show-icon": false,
bordered: false,
type: "warning",
closable: "",
style: {
"margin-bottom": "10px"
}
}, {
default: t(() => [
m(o(a(l)("tip")), 1)
]),
_: 1
}),
e(W, {
justify: "end"
}, {
default: t(() => [
e(A, {
onClick: u[3] || (u[3] = (z) => s.value = true),
secondary: "",
loading: a(d)
}, {
default: t(() => [
m(o(a(l)("addOauth2")), 1)
]),
_: 1
}, 8, [
"loading"
]),
e(A, {
onClick: c,
type: "primary",
loading: a(d)
}, {
default: t(() => [
m(o(a(l)("save")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
}),
e(k),
e(ne, {
"default-expanded-names": "1",
accordion: "",
"trigger-areas": [
"main",
"arrow"
]
}, {
default: t(() => [
(E(true), Q(it, null, Rt(p.value, (z, ce) => (E(), X(R, {
key: ce,
title: z.name
}, {
"header-extra": t(() => [
e($, {
onPositiveClick: (H) => p.value.splice(ce, 1)
}, {
trigger: t(() => [
e(A, {
tertiary: "",
type: "error"
}, {
default: t(() => [
m(o(a(l)("delete")), 1)
]),
_: 1
})
]),
default: t(() => [
m(" " + o(a(l)("delete")), 1)
]),
_: 1
}, 8, [
"onPositiveClick"
])
]),
default: t(() => [
e(D, {
model: z
}, {
default: t(() => [
e(w, {
label: a(l)("name"),
required: ""
}, {
default: t(() => [
e(b, {
value: z.name,
"onUpdate:value": (H) => z.name = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1032, [
"label"
]),
e(w, {
label: a(l)("icon")
}, {
default: t(() => [
e(b, {
value: z.icon,
"onUpdate:value": (H) => z.icon = H,
type: "textarea",
autosize: {
minRows: 2,
maxRows: 5
},
style: {
width: "100%"
}
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1032, [
"label"
]),
z.icon ? (E(), X(w, {
key: 0,
label: a(l)("iconPreview")
}, {
default: t(() => [
M("span", {
class: "oauth2-icon-preview",
innerHTML: z.icon
}, null, 8, pl)
]),
_: 2
}, 1032, [
"label"
])) : Z("", true),
e(w, {
label: "Client ID",
required: ""
}, {
default: t(() => [
e(b, {
value: z.clientID,
"onUpdate:value": (H) => z.clientID = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "Client Secret",
required: ""
}, {
default: t(() => [
e(b, {
value: z.clientSecret,
"onUpdate:value": (H) => z.clientSecret = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "Authorization URL",
required: ""
}, {
default: t(() => [
e(b, {
value: z.authorizationURL,
"onUpdate:value": (H) => z.authorizationURL = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "Access Token URL",
required: ""
}, {
default: t(() => [
e(b, {
value: z.accessTokenURL,
"onUpdate:value": (H) => z.accessTokenURL = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "Access Token Params Format",
required: ""
}, {
default: t(() => [
e(B, {
value: z.accessTokenFormat,
"onUpdate:value": (H) => z.accessTokenFormat = H,
options: C
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "User Info URL",
required: ""
}, {
default: t(() => [
e(b, {
value: z.userInfoURL,
"onUpdate:value": (H) => z.userInfoURL = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "User Email Key (Support JSONPATH like $[0].email)",
required: ""
}, {
default: t(() => [
e(b, {
value: z.userEmailKey,
"onUpdate:value": (H) => z.userEmailKey = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: a(l)("enableEmailFormat")
}, {
default: t(() => [
e(Y, {
checked: z.enableEmailFormat,
"onUpdate:checked": (H) => z.enableEmailFormat = H
}, {
default: t(() => [
m(o(a(l)("enable")), 1)
]),
_: 1
}, 8, [
"checked",
"onUpdate:checked"
])
]),
_: 2
}, 1032, [
"label"
]),
z.enableEmailFormat ? (E(), X(w, {
key: 1,
label: a(l)("userEmailFormat")
}, {
default: t(() => [
e(se, {
trigger: "hover"
}, {
trigger: t(() => [
e(b, {
value: z.userEmailFormat,
"onUpdate:value": (H) => z.userEmailFormat = H,
placeholder: "^(.+)@old\\.com$"
}, null, 8, [
"value",
"onUpdate:value"
])
]),
default: t(() => [
m(" " + o(a(l)("userEmailFormatTip")), 1)
]),
_: 2
}, 1024)
]),
_: 2
}, 1032, [
"label"
])) : Z("", true),
z.enableEmailFormat ? (E(), X(w, {
key: 2,
label: a(l)("userEmailReplace")
}, {
default: t(() => [
e(se, {
trigger: "hover"
}, {
trigger: t(() => [
e(b, {
value: z.userEmailReplace,
"onUpdate:value": (H) => z.userEmailReplace = H,
placeholder: "$1@new.com"
}, null, 8, [
"value",
"onUpdate:value"
])
]),
default: t(() => [
m(" " + o(a(l)("userEmailFormatTip")), 1)
]),
_: 2
}, 1024)
]),
_: 2
}, 1032, [
"label"
])) : Z("", true),
e(w, {
label: "Redirect URL",
required: ""
}, {
default: t(() => [
e(b, {
value: z.redirectURL,
"onUpdate:value": (H) => z.redirectURL = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: "Scope",
required: ""
}, {
default: t(() => [
e(b, {
value: z.scope,
"onUpdate:value": (H) => z.scope = H
}, null, 8, [
"value",
"onUpdate:value"
])
]),
_: 2
}, 1024),
e(w, {
label: a(l)("enableMailAllowList")
}, {
default: t(() => [
e(S, null, {
default: t(() => [
e(Y, {
checked: z.enableMailAllowList,
"onUpdate:checked": (H) => z.enableMailAllowList = H,
style: {
width: "20%"
}
}, {
default: t(() => [
m(o(a(l)("enable")), 1)
]),
_: 1
}, 8, [
"checked",
"onUpdate:checked"
]),
z.enableMailAllowList ? (E(), X(B, {
key: 0,
value: z.mailAllowList,
"onUpdate:value": (H) => z.mailAllowList = H,
filterable: "",
multiple: "",
tag: "",
style: {
width: "80%"
},
options: a(v),
placeholder: a(l)("mailAllowList")
}, {
empty: t(() => [
e(_e, {
depth: "3"
}, {
default: t(() => [
m(o(a(l)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"onUpdate:value",
"options",
"placeholder"
])) : Z("", true)
]),
_: 2
}, 1024)
]),
_: 2
}, 1032, [
"label"
])
]),
_: 2
}, 1032, [
"model"
])
]),
_: 2
}, 1032, [
"title"
]))), 128))
]),
_: 1
})
]),
_: 1
})
]);
};
}
});
_l = ee(ml, [
[
"__scopeId",
"data-v-a62aa937"
]
]);
fl = {
style: {
"margin-top": "10px"
}
};
vl = {
key: 1
};
bl = {
__name: "RoleAddressConfig",
setup(_) {
const { loading: d } = ue(), r = ae(), { t: l } = te({
messages: {
en: {
role: "Role",
maxAddressCount: "Max Address Count",
save: "Save",
successTip: "Success",
noRolesAvailable: "No roles available in system config",
roleConfigDesc: "Configure maximum address count for each user role. Role-based limits take priority over global settings.",
notConfigured: "Not Configured (Use Global Settings)"
},
zh: {
role: "\u89D2\u8272",
maxAddressCount: "\u6700\u5927\u5730\u5740\u6570\u91CF",
save: "\u4FDD\u5B58",
successTip: "\u6210\u529F",
noRolesAvailable: "\u7CFB\u7EDF\u914D\u7F6E\u4E2D\u6CA1\u6709\u53EF\u7528\u7684\u89D2\u8272",
roleConfigDesc: "\u4E3A\u6BCF\u4E2A\u7528\u6237\u89D2\u8272\u914D\u7F6E\u6700\u5927\u5730\u5740\u6570\u91CF\u3002\u89D2\u8272\u914D\u7F6E\u4F18\u5148\u4E8E\u5168\u5C40\u8BBE\u7F6E\u3002",
notConfigured: "\u672A\u914D\u7F6E\uFF08\u4F7F\u7528\u5168\u5C40\u8BBE\u7F6E\uFF09"
}
}
}), n = f([]), v = f([]), p = async () => {
try {
const i = await P.fetch("/admin/user_roles");
n.value = i;
} catch (i) {
console.log(i), r.error(i.message || "error");
}
}, s = async () => {
try {
const { configs: i } = await P.fetch("/admin/role_address_config");
v.value = n.value.map((c) => {
var _a2;
return {
role: c.role,
max_address_count: ((_a2 = i[c.role]) == null ? void 0 : _a2.maxAddressCount) ?? null
};
});
} catch (i) {
console.log(i), r.error(i.message || "error");
}
}, y = async () => {
try {
const i = {};
v.value.forEach((c) => {
c.max_address_count !== null && c.max_address_count !== void 0 && (i[c.role] = {
maxAddressCount: c.max_address_count
});
}), await P.fetch("/admin/role_address_config", {
method: "POST",
body: JSON.stringify({
configs: i
})
}), r.success(l("successTip")), await s();
} catch (i) {
console.log(i), r.error(i.message || "error");
}
}, g = [
{
title: l("role"),
key: "role",
width: 200,
render(i) {
return U(rt, {
type: "info",
bordered: false
}, {
default: () => i.role
});
}
},
{
title: l("maxAddressCount"),
key: "max_address_count",
render(i) {
return U(Je, {
value: i.max_address_count,
min: 0,
max: 999,
clearable: true,
placeholder: l("notConfigured"),
style: "width: 200px;",
onUpdateValue: (c) => {
i.max_address_count = c;
}
});
}
}
];
return le(async () => {
await p(), await s();
}), (i, c) => {
const x = Ue, C = qe;
return E(), Q("div", fl, [
e(x, {
type: "info",
bordered: false,
style: {
"margin-bottom": "20px"
}
}, {
default: t(() => [
m(o(a(l)("roleConfigDesc")), 1)
]),
_: 1
}),
n.value.length === 0 ? (E(), X(x, {
key: 0,
type: "warning",
bordered: false
}, {
default: t(() => [
m(o(a(l)("noRolesAvailable")), 1)
]),
_: 1
})) : (E(), Q("div", vl, [
e(a(Ve), {
justify: "end",
style: {
"margin-bottom": "12px"
}
}, {
default: t(() => [
e(a(O), {
loading: a(d),
onClick: y,
type: "primary"
}, {
default: t(() => [
m(o(a(l)("save")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
}),
e(C, {
columns: g,
data: v.value,
bordered: false,
embedded: ""
}, null, 8, [
"data"
])
]))
]);
};
}
};
gl = ee(bl, [
[
"__scopeId",
"data-v-68eee4b7"
]
]);
hl = {
style: {
"margin-top": "10px"
}
};
yl = {
__name: "Mails",
setup(_) {
const { adminMailTabAddress: d } = ue(), { t: r } = te({
messages: {
en: {
addressQueryTip: "Leave blank to query all addresses",
query: "Query"
},
zh: {
addressQueryTip: "\u7559\u7A7A\u67E5\u8BE2\u6240\u6709\u5730\u5740",
query: "\u67E5\u8BE2"
}
}
}), l = f(""), n = () => {
d.value = d.value.trim(), l.value = Date.now();
}, v = async (s, y) => await P.fetch(`/admin/mails?limit=${s}&offset=${y}` + (d.value ? `&address=${d.value}` : "")), p = async (s) => {
await P.fetch(`/admin/mails/${s}`, {
method: "DELETE"
});
};
return (s, y) => {
const g = pe, i = O, c = Ce;
return E(), Q("div", hl, [
e(c, null, {
default: t(() => [
e(g, {
value: a(d),
"onUpdate:value": y[0] || (y[0] = (x) => ot(d) ? d.value = x : null),
placeholder: a(r)("addressQueryTip"),
onKeydown: Ge(n, [
"enter"
]),
clearable: ""
}, null, 8, [
"value",
"placeholder"
]),
e(i, {
onClick: n,
type: "primary",
tertiary: ""
}, {
default: t(() => [
m(o(a(r)("query")), 1)
]),
_: 1
})
]),
_: 1
}),
y[1] || (y[1] = M("div", {
style: {
"margin-top": "10px"
}
}, null, -1)),
(E(), X($t, {
key: l.value,
enableUserDeleteEmail: true,
fetchMailData: v,
deleteMail: p,
showFilterInput: true
}))
]);
};
}
};
wl = {
style: {
"margin-top": "10px"
}
};
kl = {
__name: "MailsUnknow",
setup(_) {
const d = async (l, n) => await P.fetch(`/admin/mails_unknow?limit=${l}&offset=${n}`), r = async (l) => {
await P.fetch(`/admin/mails/${l}`, {
method: "DELETE"
});
};
return (l, n) => (E(), Q("div", wl, [
e($t, {
enableUserDeleteEmail: true,
fetchMailData: d,
deleteMail: r
})
]));
}
};
xl = {
class: "center"
};
Cl = {
__name: "Maintenance",
setup(_) {
const { loading: d } = ue(), r = ae(), l = f({
enableMailsAutoCleanup: false,
cleanMailsDays: 30,
enableUnknowMailsAutoCleanup: false,
cleanUnknowMailsDays: 30,
enableSendBoxAutoCleanup: false,
cleanSendBoxDays: 30,
enableAddressAutoCleanup: false,
cleanAddressDays: 30,
enableInactiveAddressAutoCleanup: false,
cleanInactiveAddressDays: 30,
enableUnboundAddressAutoCleanup: false,
cleanUnboundAddressDays: 30,
enableEmptyAddressAutoCleanup: false,
cleanEmptyAddressDays: 30,
customSqlCleanupList: []
}), { t: n } = te({
messages: {
en: {
tip: "Please input the days",
mailBoxLabel: "Cleanup the inbox before n days",
mailUnknowLabel: "Cleanup the unknow mail before n days",
sendBoxLabel: "Cleanup the sendbox before n days",
addressCreateLabel: "Cleanup the address created before n days",
inactiveAddressLabel: "Cleanup the inactive address before n days",
unboundAddressLabel: "Cleanup the unbound address before n days",
emptyAddressLabel: "Cleanup the empty address before n days",
cleanupNow: "Cleanup now",
autoCleanup: "Auto cleanup",
cleanupSuccess: "Cleanup success",
saveSuccess: "Save success",
save: "Save",
cronTip: "Enable cron cleanup, need to configure [crons] in worker, please refer to the document, setting 0 days means clear all",
basicCleanup: "Basic Cleanup",
customSqlCleanup: "Custom SQL Cleanup",
customSqlTip: "Add custom DELETE SQL statements for scheduled cleanup. Only single DELETE statement is allowed per entry.",
addCustomSql: "Add Custom SQL",
sqlName: "Name",
sqlStatement: "SQL Statement (DELETE only)",
sqlNamePlaceholder: "e.g. Clean old logs",
sqlPlaceholder: "e.g. DELETE FROM raw_mails WHERE source GLOB '*{'@'}example.com' AND created_at < datetime('now', '-3 day')",
deleteCustomSql: "Delete"
},
zh: {
tip: "\u8BF7\u8F93\u5165\u5929\u6570",
mailBoxLabel: "\u6E05\u7406 n \u5929\u524D\u7684\u6536\u4EF6\u7BB1",
mailUnknowLabel: "\u6E05\u7406 n \u5929\u524D\u7684\u65E0\u6536\u4EF6\u4EBA\u90AE\u4EF6",
sendBoxLabel: "\u6E05\u7406 n \u5929\u524D\u7684\u53D1\u4EF6\u7BB1",
addressCreateLabel: "\u6E05\u7406 n \u5929\u524D\u521B\u5EFA\u7684\u5730\u5740",
inactiveAddressLabel: "\u6E05\u7406 n \u5929\u524D\u7684\u672A\u6D3B\u8DC3\u5730\u5740",
unboundAddressLabel: "\u6E05\u7406 n \u5929\u524D\u7684\u672A\u7ED1\u5B9A\u7528\u6237\u5730\u5740",
emptyAddressLabel: "\u6E05\u7406 n \u5929\u524D\u7A7A\u90AE\u4EF6\u7684\u90AE\u7BB1\u5730\u5740",
autoCleanup: "\u81EA\u52A8\u6E05\u7406",
cleanupSuccess: "\u6E05\u7406\u6210\u529F",
saveSuccess: "\u4FDD\u5B58\u6210\u529F",
cleanupNow: "\u7ACB\u5373\u6E05\u7406",
save: "\u4FDD\u5B58",
cronTip: "\u542F\u7528\u5B9A\u65F6\u6E05\u7406, \u9700\u5728 worker \u914D\u7F6E [crons] \u53C2\u6570, \u8BF7\u53C2\u8003\u6587\u6863, \u914D\u7F6E\u4E3A 0 \u5929\u8868\u793A\u5168\u90E8\u6E05\u7A7A",
basicCleanup: "\u57FA\u7840\u6E05\u7406",
customSqlCleanup: "\u81EA\u5B9A\u4E49 SQL \u6E05\u7406",
customSqlTip: "\u6DFB\u52A0\u81EA\u5B9A\u4E49 DELETE SQL \u8BED\u53E5\u8FDB\u884C\u5B9A\u65F6\u6E05\u7406\u3002\u6BCF\u6761\u8BB0\u5F55\u4EC5\u5141\u8BB8\u5355\u6761 DELETE \u8BED\u53E5\u3002",
addCustomSql: "\u6DFB\u52A0\u81EA\u5B9A\u4E49 SQL",
sqlName: "\u540D\u79F0",
sqlStatement: "SQL \u8BED\u53E5 (\u4EC5\u9650 DELETE)",
sqlNamePlaceholder: "\u4F8B\u5982: \u6E05\u7406\u65E7\u65E5\u5FD7",
sqlPlaceholder: "\u4F8B\u5982: DELETE FROM raw_mails WHERE source GLOB '*{'@'}example.com' AND created_at < datetime('now', '-3 day')",
deleteCustomSql: "\u5220\u9664"
}
}
}), v = async (i, c) => {
try {
await P.fetch("/admin/cleanup", {
method: "POST",
body: JSON.stringify({
cleanType: i,
cleanDays: c
})
}), r.success(n("cleanupSuccess"));
} catch (x) {
r.error(x.message || "error");
}
}, p = () => {
l.value.customSqlCleanupList || (l.value.customSqlCleanupList = []), l.value.customSqlCleanupList.push({
id: Date.now().toString(),
name: "",
sql: "",
enabled: false
});
}, s = (i) => {
l.value.customSqlCleanupList.splice(i, 1);
}, y = async () => {
try {
const i = await P.fetch("/admin/auto_cleanup");
i && Object.assign(l.value, i), l.value.customSqlCleanupList || (l.value.customSqlCleanupList = []);
} catch (i) {
r.error(i.message || "error");
}
}, g = async () => {
try {
await P.fetch("/admin/auto_cleanup", {
method: "POST",
body: JSON.stringify(l.value)
}), r.success(n("saveSuccess"));
} catch (i) {
r.error(i.message || "error");
}
};
return le(async () => {
await y();
}), (i, c) => {
const x = Ue, C = O, L = De, u = Ke, b = Je, w = It, N = ge, K = et, D = zt, A = pe, I = Ve, q = de, W = Bt;
return E(), Q("div", xl, [
e(q, {
bordered: false,
embedded: ""
}, {
default: t(() => [
e(x, {
"show-icon": false,
bordered: false,
type: "warning"
}, {
default: t(() => [
M("span", null, o(a(n)("cronTip")), 1)
]),
_: 1
}),
e(L, {
justify: "end"
}, {
default: t(() => [
e(C, {
onClick: g,
type: "primary",
loading: a(d)
}, {
default: t(() => [
m(o(a(n)("save")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
}),
e(W, {
type: "segment",
style: {
"margin-top": "16px"
}
}, {
default: t(() => [
e(D, {
name: "basic",
tab: a(n)("basicCleanup")
}, {
default: t(() => [
e(K, {
model: l.value
}, {
default: t(() => [
e(N, {
label: a(n)("mailBoxLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableMailsAutoCleanup,
"onUpdate:checked": c[0] || (c[0] = (k) => l.value.enableMailsAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanMailsDays,
"onUpdate:value": c[1] || (c[1] = (k) => l.value.cleanMailsDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[2] || (c[2] = (k) => v("mails", l.value.cleanMailsDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(n)("mailUnknowLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableUnknowMailsAutoCleanup,
"onUpdate:checked": c[3] || (c[3] = (k) => l.value.enableUnknowMailsAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanUnknowMailsDays,
"onUpdate:value": c[4] || (c[4] = (k) => l.value.cleanUnknowMailsDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[5] || (c[5] = (k) => v("mails_unknow", l.value.cleanUnknowMailsDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(n)("sendBoxLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableSendBoxAutoCleanup,
"onUpdate:checked": c[6] || (c[6] = (k) => l.value.enableSendBoxAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanSendBoxDays,
"onUpdate:value": c[7] || (c[7] = (k) => l.value.cleanSendBoxDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[8] || (c[8] = (k) => v("sendbox", l.value.cleanSendBoxDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(n)("addressCreateLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableAddressAutoCleanup,
"onUpdate:checked": c[9] || (c[9] = (k) => l.value.enableAddressAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanAddressDays,
"onUpdate:value": c[10] || (c[10] = (k) => l.value.cleanAddressDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[11] || (c[11] = (k) => v("addressCreated", l.value.cleanAddressDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(n)("inactiveAddressLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableInactiveAddressAutoCleanup,
"onUpdate:checked": c[12] || (c[12] = (k) => l.value.enableInactiveAddressAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanInactiveAddressDays,
"onUpdate:value": c[13] || (c[13] = (k) => l.value.cleanInactiveAddressDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[14] || (c[14] = (k) => v("inactiveAddress", l.value.cleanInactiveAddressDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(n)("unboundAddressLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableUnboundAddressAutoCleanup,
"onUpdate:checked": c[15] || (c[15] = (k) => l.value.enableUnboundAddressAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanUnboundAddressDays,
"onUpdate:value": c[16] || (c[16] = (k) => l.value.cleanUnboundAddressDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[17] || (c[17] = (k) => v("unboundAddress", l.value.cleanUnboundAddressDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(n)("emptyAddressLabel")
}, {
default: t(() => [
e(u, {
checked: l.value.enableEmptyAddressAutoCleanup,
"onUpdate:checked": c[18] || (c[18] = (k) => l.value.enableEmptyAddressAutoCleanup = k)
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: l.value.cleanEmptyAddressDays,
"onUpdate:value": c[19] || (c[19] = (k) => l.value.cleanEmptyAddressDays = k),
placeholder: a(n)("tip")
}, null, 8, [
"value",
"placeholder"
]),
e(C, {
onClick: c[20] || (c[20] = (k) => v("emptyAddress", l.value.cleanEmptyAddressDays))
}, {
icon: t(() => [
e(w, {
component: a(Pe)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("cleanupNow")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
}, 8, [
"model"
])
]),
_: 1
}, 8, [
"tab"
]),
e(D, {
name: "custom_sql",
tab: a(n)("customSqlCleanup")
}, {
default: t(() => [
e(x, {
"show-icon": false,
bordered: false,
type: "info",
style: {
"margin-bottom": "16px"
}
}, {
default: t(() => [
M("span", null, o(a(n)("customSqlTip")), 1)
]),
_: 1
}),
e(I, {
vertical: ""
}, {
default: t(() => [
(E(true), Q(it, null, Rt(l.value.customSqlCleanupList, (k, $) => (E(), X(q, {
key: k.id,
size: "small"
}, {
default: t(() => [
e(I, {
vertical: ""
}, {
default: t(() => [
e(I, {
align: "center"
}, {
default: t(() => [
e(u, {
checked: k.enabled,
"onUpdate:checked": (B) => k.enabled = B
}, {
default: t(() => [
m(o(a(n)("autoCleanup")), 1)
]),
_: 1
}, 8, [
"checked",
"onUpdate:checked"
]),
e(A, {
value: k.name,
"onUpdate:value": (B) => k.name = B,
placeholder: a(n)("sqlNamePlaceholder"),
style: {
width: "200px"
}
}, null, 8, [
"value",
"onUpdate:value",
"placeholder"
]),
e(C, {
onClick: (B) => s($),
type: "error",
quaternary: ""
}, {
icon: t(() => [
e(w, {
component: a(La)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("deleteCustomSql")), 1)
]),
_: 1
}, 8, [
"onClick"
])
]),
_: 2
}, 1024),
e(A, {
value: k.sql,
"onUpdate:value": (B) => k.sql = B,
type: "textarea",
placeholder: a(n)("sqlPlaceholder"),
autosize: {
minRows: 2
},
class: "sql-input"
}, null, 8, [
"value",
"onUpdate:value",
"placeholder"
])
]),
_: 2
}, 1024)
]),
_: 2
}, 1024))), 128)),
e(C, {
onClick: p
}, {
icon: t(() => [
e(w, {
component: a(Aa)
}, null, 8, [
"component"
])
]),
default: t(() => [
m(" " + o(a(n)("addCustomSql")), 1)
]),
_: 1
})
]),
_: 1
})
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
})
]),
_: 1
})
]);
};
}
};
Al = ee(Cl, [
[
"__scopeId",
"data-v-2f016879"
]
]);
Sl = {
class: "center"
};
Ul = {
__name: "DatabaseManager",
setup(_) {
const d = ae(), r = f({
need_initialization: false,
need_migration: false,
current_db_version: "",
code_db_version: ""
}), { t: l } = te({
messages: {
en: {
need_initialization_tip: "Database initialization is required. Please initialize the database.",
need_migration_tip: "Database migration is required. Please migrate the database.",
current_db_version: "Current DB Version",
code_db_version: "Code Needed DB Version",
init: "Initialize Database",
migration: "Migrate Database",
initializationSuccess: "Database initialized successfully",
migrationSuccess: "Database migrated successfully"
},
zh: {
need_initialization_tip: "\u9700\u8981\u521D\u59CB\u5316\u6570\u636E\u5E93\uFF0C\u8BF7\u521D\u59CB\u5316\u6570\u636E\u5E93",
need_migration_tip: "\u9700\u8981\u8FC1\u79FB\u6570\u636E\u5E93\uFF0C\u8BF7\u8FC1\u79FB\u6570\u636E\u5E93",
current_db_version: "\u5F53\u524D\u6570\u636E\u5E93\u7248\u672C",
code_db_version: "\u9700\u8981\u7684\u6570\u636E\u5E93\u7248\u672C",
init: "\u521D\u59CB\u5316\u6570\u636E\u5E93",
migration: "\u5347\u7EA7\u6570\u636E\u5E93 Schema",
initializationSuccess: "\u6570\u636E\u5E93\u521D\u59CB\u5316\u6210\u529F",
migrationSuccess: "\u6570\u636E\u5E93\u5347\u7EA7\u6210\u529F"
}
}
}), n = async () => {
try {
const s = await P.fetch("/admin/db_version");
s && Object.assign(r.value, s);
} catch (s) {
d.error(s.message || "error");
}
}, v = async () => {
try {
await P.fetch("/admin/db_initialize", {
method: "POST"
}), await n(), d.success(l("initializationSuccess"));
} catch (s) {
d.error(s.message || "error");
}
}, p = async () => {
try {
await P.fetch("/admin/db_migration", {
method: "POST"
}), await n(), d.success(l("migrationSuccess"));
} catch (s) {
d.error(s.message || "error");
}
};
return le(async () => {
await n();
}), (s, y) => {
const g = O, i = Ue, c = de;
return E(), Q("div", Sl, [
e(c, {
bordered: false,
embedded: ""
}, {
default: t(() => [
r.value.need_initialization ? (E(), X(i, {
key: 0,
type: "warning",
"show-icon": false,
bordered: false
}, {
default: t(() => [
M("span", null, o(a(l)("need_initialization_tip")), 1),
e(g, {
onClick: v,
type: "primary",
secondary: "",
block: "",
loading: s.loading
}, {
default: t(() => [
m(o(a(l)("init")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
})) : Z("", true),
r.value.need_migration ? (E(), X(i, {
key: 1,
type: "warning",
"show-icon": false,
bordered: false
}, {
default: t(() => [
M("span", null, o(a(l)("need_migration_tip")), 1),
e(g, {
onClick: p,
type: "primary",
secondary: "",
block: "",
loading: s.loading
}, {
default: t(() => [
m(o(a(l)("migration")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
_: 1
})) : Z("", true),
e(i, {
type: "info",
"show-icon": false,
bordered: false
}, {
default: t(() => [
M("span", null, o(a(l)("current_db_version")) + ": " + o(r.value.current_db_version || "unknown") + ", " + o(a(l)("code_db_version")) + ": " + o(r.value.code_db_version), 1)
]),
_: 1
})
]),
_: 1
})
]);
};
}
};
Ct = ee(Ul, [
[
"__scopeId",
"data-v-6eef5c21"
]
]);
Ll = {
class: "center"
};
Il = {
key: 0
};
Ml = ie({
__name: "Telegram",
setup(_) {
const d = ae(), { t: r } = te({
messages: {
en: {
init: "Init",
successTip: "Success",
status: "Check Status",
enableTelegramAllowList: "Enable Telegram Allow List(Manually input Chat ID)",
enable: "Enable",
telegramAllowList: "Telegram Allow List(Manually input telegram Chat ID)",
manualInputPrompt: "Type and press Enter to add",
save: "Save",
miniAppUrl: "Telegram Mini App URL",
enableGlobalMailPush: "Enable Global Mail Push(Manually input telegram Chat ID)",
globalMailPushList: "Global Mail Push Chat ID List",
globalMailPushListTip: "Support chat_id of private chat/group/channel. You can send a message to your bot, then visit this link to see chat_id, https://api.telegram.org/bot<Replace with your BOT TOKEN>/getUpdates"
},
zh: {
init: "\u521D\u59CB\u5316",
successTip: "\u6210\u529F",
status: "\u67E5\u770B\u72B6\u6001",
enableTelegramAllowList: "\u542F\u7528 Telegram \u767D\u540D\u5355(\u624B\u52A8\u8F93\u5165 Chat ID, \u56DE\u8F66\u589E\u52A0)",
enable: "\u542F\u7528",
telegramAllowList: "Telegram \u767D\u540D\u5355(\u624B\u52A8\u8F93\u5165 Chat ID, \u56DE\u8F66\u589E\u52A0)",
manualInputPrompt: "\u8F93\u5165\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
save: "\u4FDD\u5B58",
miniAppUrl: "\u7535\u62A5\u5C0F\u7A0B\u5E8F URL(\u8BF7\u8F93\u5165\u4F60\u90E8\u7F72\u7684\u7535\u62A5\u5C0F\u7A0B\u5E8F\u7F51\u9875\u5730\u5740)",
enableGlobalMailPush: "\u542F\u7528\u5168\u5C40\u90AE\u4EF6\u63A8\u9001(\u624B\u52A8\u8F93\u5165\u90AE\u7BB1\u7BA1\u7406\u5458\u7684 telegram Chat ID, \u56DE\u8F66\u589E\u52A0)",
globalMailPushList: "\u5168\u5C40\u90AE\u4EF6\u63A8\u9001 Chat ID \u5217\u8868",
globalMailPushListTip: "\u652F\u6301\u5BF9\u8BDD/\u7FA4\u7EC4/\u9891\u9053\u7684 Chat ID, \u60A8\u53EF\u4EE5\u53D1\u9001\u4E00\u6761\u6D88\u606F\u7ED9\u60A8\u7684\u673A\u5668\u4EBA\uFF0C\u7136\u540E\u8BBF\u95EE\u6B64\u94FE\u63A5\u6765\u67E5\u770B chat_id, https://api.telegram.org/bot<\u8FD9\u91CC\u66FF\u6362\u6210\u60A8\u7684 BOT TOKEN>/getUpdates"
}
}
}), l = f({
fetched: false
}), n = async () => {
try {
const i = await P.fetch("/admin/telegram/status");
Object.assign(l.value, i), l.value.fetched = true;
} catch (i) {
d.error(i.message || "error");
}
}, v = async () => {
try {
await P.fetch("/admin/telegram/init", {
method: "POST"
}), d.success(r("successTip"));
} catch (i) {
d.error(i.message || "error");
}
};
class p {
constructor(c, x, C, L, u) {
__publicField(this, "enableAllowList");
__publicField(this, "allowList");
__publicField(this, "miniAppUrl");
__publicField(this, "enableGlobalMailPush");
__publicField(this, "globalMailPushList");
this.enableAllowList = c, this.allowList = x, this.miniAppUrl = C, this.enableGlobalMailPush = L, this.globalMailPushList = u;
}
}
const s = f(new p(false, [], "", false, [])), y = async () => {
try {
const i = await P.fetch("/admin/telegram/settings");
Object.assign(s.value, i);
} catch (i) {
d.error(i.message || "error");
}
}, g = async () => {
try {
await P.fetch("/admin/telegram/settings", {
method: "POST",
body: JSON.stringify(s.value)
}), d.success(r("successTip"));
} catch (i) {
d.error(i.message || "error");
}
};
return le(async () => {
await y();
}), (i, c) => {
const x = O, C = De, L = Ke, u = Le, b = re, w = Ce, N = ge, K = pe, D = de;
return E(), Q("div", Ll, [
e(D, {
bordered: false,
embedded: "",
style: {
"max-width": "800px",
overflow: "auto"
}
}, {
default: t(() => [
e(C, {
justify: "end"
}, {
default: t(() => [
e(x, {
onClick: n,
secondary: ""
}, {
default: t(() => [
m(o(a(r)("status")), 1)
]),
_: 1
}),
e(x, {
onClick: v,
type: "primary"
}, {
default: t(() => [
m(o(a(r)("init")), 1)
]),
_: 1
}),
e(x, {
onClick: g,
type: "primary"
}, {
default: t(() => [
m(o(a(r)("save")), 1)
]),
_: 1
})
]),
_: 1
}),
e(D, {
bordered: false,
embedded: ""
}, {
default: t(() => [
e(N, {
label: a(r)("enableTelegramAllowList")
}, {
default: t(() => [
e(w, null, {
default: t(() => [
e(L, {
checked: s.value.enableAllowList,
"onUpdate:checked": c[0] || (c[0] = (A) => s.value.enableAllowList = A),
style: {
width: "20%"
}
}, {
default: t(() => [
m(o(a(r)("enable")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: s.value.allowList,
"onUpdate:value": c[1] || (c[1] = (A) => s.value.allowList = A),
filterable: "",
multiple: "",
tag: "",
style: {
width: "80%"
},
placeholder: a(r)("telegramAllowList")
}, {
empty: t(() => [
e(u, {
depth: "3"
}, {
default: t(() => [
m(o(a(r)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
c[5] || (c[5] = M("br", null, null, -1)),
e(N, {
label: a(r)("enableGlobalMailPush")
}, {
feedback: t(() => [
e(u, {
depth: "3"
}, {
default: t(() => [
m(o(a(r)("globalMailPushListTip")), 1)
]),
_: 1
})
]),
default: t(() => [
e(w, null, {
default: t(() => [
e(L, {
checked: s.value.enableGlobalMailPush,
"onUpdate:checked": c[2] || (c[2] = (A) => s.value.enableGlobalMailPush = A),
style: {
width: "20%"
}
}, {
default: t(() => [
m(o(a(r)("enable")), 1)
]),
_: 1
}, 8, [
"checked"
]),
e(b, {
value: s.value.globalMailPushList,
"onUpdate:value": c[3] || (c[3] = (A) => s.value.globalMailPushList = A),
filterable: "",
multiple: "",
tag: "",
style: {
width: "80%"
},
placeholder: a(r)("globalMailPushList")
}, {
empty: t(() => [
e(u, {
depth: "3"
}, {
default: t(() => [
m(o(a(r)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
c[6] || (c[6] = M("br", null, null, -1)),
e(N, {
label: a(r)("miniAppUrl")
}, {
default: t(() => [
e(K, {
value: s.value.miniAppUrl,
"onUpdate:value": c[4] || (c[4] = (A) => s.value.miniAppUrl = A)
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
}),
l.value.fetched ? (E(), Q("pre", Il, o(JSON.stringify(l.value, null, 2)), 1)) : Z("", true)
]),
_: 1
})
]);
};
}
});
Tl = ee(Ml, [
[
"__scopeId",
"data-v-008f01c5"
]
]);
Pl = {
class: "center"
};
El = ie({
__name: "Webhook",
setup(_) {
const d = ae(), { t: r } = te({
messages: {
en: {
successTip: "Success",
enableAllowList: "Enable Allow List (Restrict webhook access to specific users)",
webhookAllowList: "Webhook Allow List(Enter the mail address that is allowed to use webhook and enter)",
manualInputPrompt: "Type and press Enter to add",
save: "Save",
notEnabled: "Webhook is not enabled"
},
zh: {
successTip: "\u6210\u529F",
enableAllowList: "\u542F\u7528\u767D\u540D\u5355 (\u9650\u5236 webhook \u8BBF\u95EE\u6743\u9650\uFF0C\u53EA\u6709\u767D\u540D\u5355\u4E2D\u7684\u7528\u6237\u53EF\u4EE5\u4F7F\u7528)",
webhookAllowList: "Webhook \u767D\u540D\u5355(\u8BF7\u8F93\u5165\u5141\u8BB8\u4F7F\u7528webhook \u7684\u90AE\u7BB1\u5730\u5740, \u56DE\u8F66\u589E\u52A0)",
manualInputPrompt: "\u8F93\u5165\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
save: "\u4FDD\u5B58",
notEnabled: "Webhook \u672A\u5F00\u542F"
}
}
});
class l {
constructor(i, c) {
__publicField(this, "enableAllowList");
__publicField(this, "allowList");
this.enableAllowList = i, this.allowList = c;
}
}
const n = f(new l(false, [])), v = f(false), p = f(""), s = async () => {
try {
const g = await P.fetch("/admin/webhook/settings");
Object.assign(n.value, g), v.value = true;
} catch (g) {
p.value = g.message || "error";
}
}, y = async () => {
try {
await P.fetch("/admin/webhook/settings", {
method: "POST",
body: JSON.stringify(n.value)
}), d.success(r("successTip"));
} catch (g) {
d.error(g.message || "error");
}
};
return le(async () => {
await s();
}), (g, i) => {
const c = O, x = De, C = Fe, L = ge, u = Le, b = re, w = de, N = oa;
return E(), Q("div", Pl, [
v.value ? (E(), X(w, {
key: 0,
bordered: false,
embedded: "",
style: {
"max-width": "800px",
overflow: "auto"
}
}, {
default: t(() => [
e(x, {
justify: "end"
}, {
default: t(() => [
e(c, {
onClick: y,
type: "primary"
}, {
default: t(() => [
m(o(a(r)("save")), 1)
]),
_: 1
})
]),
_: 1
}),
e(L, {
label: a(r)("enableAllowList")
}, {
default: t(() => [
e(C, {
value: n.value.enableAllowList,
"onUpdate:value": i[0] || (i[0] = (K) => n.value.enableAllowList = K),
round: false
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
]),
e(L, {
label: a(r)("webhookAllowList")
}, {
default: t(() => [
e(b, {
value: n.value.allowList,
"onUpdate:value": i[1] || (i[1] = (K) => n.value.allowList = K),
filterable: "",
multiple: "",
tag: "",
placeholder: a(r)("webhookAllowList")
}, {
empty: t(() => [
e(u, {
depth: "3"
}, {
default: t(() => [
m(o(a(r)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
})) : (E(), X(N, {
key: 1,
status: "404",
title: a(r)("notEnabled"),
description: p.value
}, null, 8, [
"title",
"description"
]))
]);
};
}
});
Dl = ee(El, [
[
"__scopeId",
"data-v-6baca40b"
]
]);
Rl = ie({
__name: "MailWebhook",
setup(_) {
const d = async () => await P.fetch("/admin/mail_webhook/settings"), r = async (n) => {
await P.fetch("/admin/mail_webhook/settings", {
method: "POST",
body: JSON.stringify(n)
});
}, l = async (n) => {
await P.fetch("/admin/mail_webhook/test", {
method: "POST",
body: JSON.stringify(n)
});
};
return (n, v) => (E(), X(ra, {
fetchData: d,
saveSettings: r,
testSettings: l
}));
}
});
$l = {
class: "center"
};
Bl = {
__name: "WorkerConfig",
setup(_) {
const { loading: d } = ue(), r = ae(), l = f({}), n = async () => {
try {
const v = await P.fetch("/admin/worker/configs");
Object.assign(l.value, v);
} catch (v) {
r.error(v.message || "error");
}
};
return le(async () => {
await n();
}), (v, p) => {
const s = de;
return E(), Q("div", $l, [
e(s, {
bordered: false,
embedded: "",
style: {
"max-width": "800px",
overflow: "auto"
}
}, {
default: t(() => [
M("pre", null, o(JSON.stringify(l.value, null, 2)), 1)
]),
_: 1
})
]);
};
}
};
At = ee(Bl, [
[
"__scopeId",
"data-v-92d764b2"
]
]);
zl = {
class: "center"
};
Ol = {
style: {
"line-height": "1.8"
}
};
Nl = {
__name: "IpBlacklistSettings",
setup(_) {
const { loading: d } = ue(), r = ae(), { t: l } = te({
messages: {
en: {
title: "IP Blacklist Settings",
manualInputPrompt: "Type pattern and press Enter to add",
save: "Save",
successTip: "Save Success",
enable_ip_blacklist: "Enable IP Blacklist",
enable_tip: "Block IPs matching blacklist patterns from accessing rate-limited APIs",
ip_blacklist: "IP Blacklist Patterns",
ip_blacklist_placeholder: "Enter pattern (e.g., 192.168.1 or ^10\\.0\\.0\\.5$)",
asn_blacklist: "ASN Organization Blacklist",
asn_blacklist_placeholder: "Enter ASN organization (e.g., Google, Amazon)",
fingerprint_blacklist: "Browser Fingerprint Blacklist",
fingerprint_blacklist_placeholder: "Enter fingerprint ID (e.g., a1b2c3d4e5f6g7h8)",
tip_ip: 'IP Blacklist: Supports text matching (e.g., "192.168.1") or regex (e.g., "^10\\.0\\.0\\.5$").',
tip_asn: "ASN Organization: Block by ISP/provider. Case-insensitive text matching or regex.",
tip_fingerprint: "Browser Fingerprint: Block by browser fingerprint. Supports exact matching or regex patterns.",
tip_daily_limit: "Daily Limit: Restrict the maximum number of requests per IP address per day (1-1000000).",
tip_scope: "Applies to: Create Address, Send Mail, External Send Mail API, User Registration, Verify Code",
enable_daily_limit: "Enable Daily Request Limit",
enable_daily_limit_tip: "Limit the number of API requests per IP address per day",
daily_request_limit: "Daily Request Limit",
daily_request_limit_placeholder: "Enter limit (e.g., 1000)"
},
zh: {
title: "IP \u9ED1\u540D\u5355\u8BBE\u7F6E",
manualInputPrompt: "\u8F93\u5165\u5339\u914D\u6A21\u5F0F\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
save: "\u4FDD\u5B58",
successTip: "\u4FDD\u5B58\u6210\u529F",
enable_ip_blacklist: "\u542F\u7528 IP \u9ED1\u540D\u5355",
enable_tip: "\u963B\u6B62\u5339\u914D\u9ED1\u540D\u5355\u7684 IP \u8BBF\u95EE\u9650\u6D41 API",
ip_blacklist: "IP \u9ED1\u540D\u5355\u5339\u914D\u6A21\u5F0F",
ip_blacklist_placeholder: "\u8F93\u5165\u5339\u914D\u6A21\u5F0F\uFF08\u4F8B\u5982\uFF1A192.168.1 \u6216 ^10\\.0\\.0\\.5$\uFF09",
asn_blacklist: "ASN \u7EC4\u7EC7\uFF08\u8FD0\u8425\u5546\uFF09\u9ED1\u540D\u5355",
asn_blacklist_placeholder: "\u8F93\u5165 ASN \u7EC4\u7EC7\u540D\u79F0\uFF08\u4F8B\u5982\uFF1AGoogle, Amazon\uFF09",
fingerprint_blacklist: "\u6D4F\u89C8\u5668\u6307\u7EB9\u9ED1\u540D\u5355",
fingerprint_blacklist_placeholder: "\u8F93\u5165\u6307\u7EB9 ID\uFF08\u4F8B\u5982\uFF1Aa1b2c3d4e5f6g7h8\uFF09",
tip_ip: 'IP \u9ED1\u540D\u5355\uFF1A\u652F\u6301\u6587\u672C\u5339\u914D\uFF08\u5982 "192.168.1"\uFF09\u6216\u6B63\u5219\u8868\u8FBE\u5F0F\uFF08\u5982 "^10\\.0\\.0\\.5$"\uFF09\u3002',
tip_asn: "ASN \u7EC4\u7EC7\uFF1A\u6839\u636E\u8FD0\u8425\u5546/ISP \u62C9\u9ED1\u3002\u652F\u6301\u4E0D\u533A\u5206\u5927\u5C0F\u5199\u7684\u6587\u672C\u5339\u914D\u6216\u6B63\u5219\u8868\u8FBE\u5F0F\u3002",
tip_fingerprint: "\u6D4F\u89C8\u5668\u6307\u7EB9\uFF1A\u6839\u636E\u6D4F\u89C8\u5668\u6307\u7EB9\u62C9\u9ED1\u3002\u652F\u6301\u5B8C\u5168\u5339\u914D\u6216\u6B63\u5219\u8868\u8FBE\u5F0F\u3002",
tip_daily_limit: "\u6BCF\u65E5\u9650\u6D41\uFF1A\u9650\u5236\u5355\u4E2A IP \u5730\u5740\u6BCF\u5929\u6700\u591A\u8BF7\u6C42\u6B21\u6570\uFF081-1000000\uFF09\u3002",
tip_scope: "\u4F5C\u7528\u8303\u56F4\uFF1A\u521B\u5EFA\u90AE\u7BB1\u5730\u5740\u3001\u53D1\u9001\u90AE\u4EF6\u3001\u5916\u90E8\u53D1\u9001\u90AE\u4EF6 API\u3001\u7528\u6237\u6CE8\u518C\u3001\u9A8C\u8BC1\u7801\u9A8C\u8BC1",
enable_daily_limit: "\u542F\u7528\u6BCF\u65E5\u8BF7\u6C42\u9650\u6D41",
enable_daily_limit_tip: "\u9650\u5236\u6BCF\u4E2A IP \u5730\u5740\u6BCF\u5929\u7684 API \u8BF7\u6C42\u6B21\u6570",
daily_request_limit: "\u6BCF\u65E5\u8BF7\u6C42\u6B21\u6570\u4E0A\u9650",
daily_request_limit_placeholder: "\u8F93\u5165\u9650\u5236\u6B21\u6570\uFF08\u4F8B\u5982\uFF1A1000\uFF09"
}
}
}), n = f(false), v = f([]), p = f([]), s = f([]), y = f(false), g = f(1e3), i = async () => {
try {
d.value = true;
const x = await P.fetch("/admin/ip_blacklist/settings");
n.value = x.enabled || false, v.value = x.blacklist || [], p.value = x.asnBlacklist || [], s.value = x.fingerprintBlacklist || [], y.value = x.enableDailyLimit || false, g.value = x.dailyRequestLimit || 1e3;
} catch (x) {
r.error(x.message || "error");
} finally {
d.value = false;
}
}, c = async () => {
try {
d.value = true, await P.fetch("/admin/ip_blacklist/settings", {
method: "POST",
body: JSON.stringify({
enabled: n.value,
blacklist: v.value || [],
asnBlacklist: p.value || [],
fingerprintBlacklist: s.value || [],
enableDailyLimit: y.value,
dailyRequestLimit: g.value
})
}), r.success(l("successTip"));
} catch (x) {
r.error(x.message || "error");
} finally {
d.value = false;
}
};
return le(async () => {
await i();
}), (x, C) => {
const L = O, u = Ue, b = Fe, w = Le, N = ge, K = re, D = ut, A = Je, I = Ve, q = de;
return E(), Q("div", zl, [
e(q, {
title: a(l)("title"),
bordered: false,
embedded: "",
style: {
"max-width": "800px"
}
}, {
"header-extra": t(() => [
e(L, {
onClick: c,
type: "primary",
loading: a(d)
}, {
default: t(() => [
m(o(a(l)("save")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
e(I, {
vertical: "",
size: 20
}, {
default: t(() => [
e(u, {
"show-icon": false,
bordered: false,
type: "info"
}, {
default: t(() => [
M("div", Ol, [
M("div", null, [
M("strong", null, o(a(l)("tip_scope")), 1)
]),
M("div", null, "\u2022 " + o(a(l)("tip_ip")), 1),
M("div", null, "\u2022 " + o(a(l)("tip_asn")), 1),
M("div", null, "\u2022 " + o(a(l)("tip_fingerprint")), 1),
M("div", null, "\u2022 " + o(a(l)("tip_daily_limit")), 1)
])
]),
_: 1
}),
e(N, {
label: a(l)("enable_ip_blacklist")
}, {
default: t(() => [
e(b, {
value: n.value,
"onUpdate:value": C[0] || (C[0] = (W) => n.value = W),
round: false
}, null, 8, [
"value"
]),
e(w, {
depth: "3",
style: {
"margin-left": "10px",
"font-size": "12px"
}
}, {
default: t(() => [
m(o(a(l)("enable_tip")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(l)("ip_blacklist")
}, {
default: t(() => [
e(K, {
value: v.value,
"onUpdate:value": C[1] || (C[1] = (W) => v.value = W),
filterable: "",
multiple: "",
tag: "",
placeholder: a(l)("ip_blacklist_placeholder"),
disabled: !n.value
}, {
empty: t(() => [
e(w, {
depth: "3"
}, {
default: t(() => [
m(o(a(l)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder",
"disabled"
])
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(l)("asn_blacklist")
}, {
default: t(() => [
e(K, {
value: p.value,
"onUpdate:value": C[2] || (C[2] = (W) => p.value = W),
filterable: "",
multiple: "",
tag: "",
placeholder: a(l)("asn_blacklist_placeholder"),
disabled: !n.value
}, {
empty: t(() => [
e(w, {
depth: "3"
}, {
default: t(() => [
m(o(a(l)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder",
"disabled"
])
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(l)("fingerprint_blacklist")
}, {
default: t(() => [
e(K, {
value: s.value,
"onUpdate:value": C[3] || (C[3] = (W) => s.value = W),
filterable: "",
multiple: "",
tag: "",
placeholder: a(l)("fingerprint_blacklist_placeholder"),
disabled: !n.value
}, {
empty: t(() => [
e(w, {
depth: "3"
}, {
default: t(() => [
m(o(a(l)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder",
"disabled"
])
]),
_: 1
}, 8, [
"label"
]),
e(D),
e(N, {
label: a(l)("enable_daily_limit")
}, {
default: t(() => [
e(b, {
value: y.value,
"onUpdate:value": C[4] || (C[4] = (W) => y.value = W),
round: false
}, null, 8, [
"value"
]),
e(w, {
depth: "3",
style: {
"margin-left": "10px",
"font-size": "12px"
}
}, {
default: t(() => [
m(o(a(l)("enable_daily_limit_tip")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"label"
]),
e(N, {
label: a(l)("daily_request_limit")
}, {
default: t(() => [
e(A, {
value: g.value,
"onUpdate:value": C[5] || (C[5] = (W) => g.value = W),
min: 1,
max: 1e6,
placeholder: a(l)("daily_request_limit_placeholder"),
disabled: !y.value,
style: {
width: "100%"
}
}, null, 8, [
"value",
"placeholder",
"disabled"
])
]),
_: 1
}, 8, [
"label"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"title"
])
]);
};
}
};
ql = ee(Nl, [
[
"__scopeId",
"data-v-6cc70158"
]
]);
Vl = {
class: "center"
};
Fl = {
key: 1
};
jl = ie({
__name: "AiExtractSettings",
setup(_) {
const d = ae(), { t: r } = te({
messages: {
en: {
title: "AI Email Extraction Settings",
successTip: "Success",
save: "Save",
enableAllowList: "Enable Address Allowlist",
enableAllowListTip: "When enabled, AI extraction will only process emails sent to addresses in the allowlist",
allowList: "Address Allowlist (Enter address and press Enter, wildcards supported)",
allowListTip: "Wildcard * matches any characters, e.g. *{'@'}example.com matches all addresses under example.com domain",
manualInputPrompt: "Type and press Enter to add",
disabledTip: "When disabled, AI extraction will process all email addresses"
},
zh: {
title: "AI \u90AE\u4EF6\u63D0\u53D6\u8BBE\u7F6E",
successTip: "\u6210\u529F",
save: "\u4FDD\u5B58",
enableAllowList: "\u542F\u7528\u5730\u5740\u767D\u540D\u5355",
enableAllowListTip: "\u542F\u7528\u540E\uFF0CAI \u63D0\u53D6\u529F\u80FD\u4EC5\u5BF9\u767D\u540D\u5355\u4E2D\u7684\u90AE\u7BB1\u5730\u5740\u751F\u6548",
allowList: "\u5730\u5740\u767D\u540D\u5355 (\u8BF7\u8F93\u5165\u5730\u5740\u5E76\u56DE\u8F66\uFF0C\u652F\u6301\u901A\u914D\u7B26)",
allowListTip: "\u901A\u914D\u7B26 * \u53EF\u5339\u914D\u4EFB\u610F\u5B57\u7B26\uFF0C\u5982 *{'@'}example.com \u53EF\u5339\u914D example.com \u57DF\u540D\u4E0B\u7684\u6240\u6709\u5730\u5740",
manualInputPrompt: "\u8F93\u5165\u540E\u6309\u56DE\u8F66\u952E\u6DFB\u52A0",
disabledTip: "\u672A\u542F\u7528\u65F6\uFF0C\u6240\u6709\u90AE\u7BB1\u5730\u5740\u90FD\u53EF\u4F7F\u7528 AI \u63D0\u53D6\u529F\u80FD"
}
}
}), l = f({
enableAllowList: false,
allowList: []
}), n = async () => {
try {
const p = await P.fetch("/admin/ai_extract/settings");
Object.assign(l.value, p);
} catch (p) {
d.error(p.message || "error");
}
}, v = async () => {
try {
await P.fetch("/admin/ai_extract/settings", {
method: "POST",
body: JSON.stringify(l.value)
}), d.success(r("successTip"));
} catch (p) {
d.error(p.message || "error");
}
};
return le(async () => {
await n();
}), (p, s) => {
const y = O, g = De, i = Fe, c = ge, x = Ue, C = Le, L = re, u = de;
return E(), Q("div", Vl, [
e(u, {
title: a(r)("title"),
bordered: false,
embedded: "",
style: {
"max-width": "800px",
overflow: "auto"
}
}, {
default: t(() => [
e(g, {
justify: "end"
}, {
default: t(() => [
e(y, {
onClick: v,
type: "primary"
}, {
default: t(() => [
m(o(a(r)("save")), 1)
]),
_: 1
})
]),
_: 1
}),
e(c, {
label: a(r)("enableAllowList")
}, {
default: t(() => [
e(i, {
value: l.value.enableAllowList,
"onUpdate:value": s[0] || (s[0] = (b) => l.value.enableAllowList = b),
round: false
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"label"
]),
l.value.enableAllowList ? Z("", true) : (E(), X(x, {
key: 0,
type: "info",
style: {
"margin-bottom": "16px"
}
}, {
default: t(() => [
m(o(a(r)("disabledTip")), 1)
]),
_: 1
})),
l.value.enableAllowList ? (E(), Q("div", Fl, [
e(x, {
type: "warning",
style: {
"margin-bottom": "16px"
}
}, {
default: t(() => [
m(o(a(r)("enableAllowListTip")), 1)
]),
_: 1
}),
e(c, {
label: a(r)("allowList")
}, {
default: t(() => [
e(L, {
value: l.value.allowList,
"onUpdate:value": s[1] || (s[1] = (b) => l.value.allowList = b),
filterable: "",
multiple: "",
tag: "",
placeholder: a(r)("allowListTip")
}, {
empty: t(() => [
e(C, {
depth: "3"
}, {
default: t(() => [
m(o(a(r)("manualInputPrompt")), 1)
]),
_: 1
})
]),
_: 1
}, 8, [
"value",
"placeholder"
])
]),
_: 1
}, 8, [
"label"
]),
e(C, {
depth: "3",
style: {
"font-size": "12px"
}
}, {
default: t(() => [
m(o(a(r)("allowListTip")), 1)
]),
_: 1
})
])) : Z("", true)
]),
_: 1
}, 8, [
"title"
])
]);
};
}
});
Wl = ee(jl, [
[
"__scopeId",
"data-v-230de380"
]
]);
Hl = {
key: 0
};
Kl = {
style: {
display: "flex",
"justify-content": "center",
padding: "20px"
}
};
Gl = {
__name: "Admin",
setup(_) {
const { adminAuth: d, showAdminAuth: r, adminTab: l, loading: n, globalTabplacement: v, showAdminPage: p, userSettings: s, openSettings: y } = ue(), g = ae(), i = ia(), c = ca(() => (n.value = true, ma(() => import("./SendMail-gI-QSIA2.js"), __vite__mapDeps([0,1,2,3,4,5])).finally(() => n.value = false))), x = async () => {
try {
d.value = N.value, location.reload();
} catch (A) {
g.error(A.message || "error");
}
}, C = f(false), L = async () => {
d.value = "", r.value = false, l.value = "account", g.success(u("logoutSuccess")), await i.push(pa("/", b.value));
}, { t: u, locale: b } = te({
messages: {
en: {
accessHeader: "Admin Password",
accessTip: "Please enter the admin password",
mails: "Emails",
sendMail: "Send Mail",
qucickSetup: "Quick Setup",
account: "Account",
account_create: "Create Account",
account_settings: "Account Settings",
user: "User",
user_management: "User Management",
user_settings: "User Settings",
userOauth2Settings: "Oauth2 Settings",
roleAddressConfig: "Role Address Config",
unknow: "Mails with unknow receiver",
senderAccess: "Sender Access Control",
sendBox: "Send Box",
telegram: "Telegram Bot",
webhookSettings: "Webhook Settings",
statistics: "Statistics",
maintenance: "Maintenance",
database: "Database",
workerconfig: "Worker Config",
ipBlacklistSettings: "IP Blacklist",
aiExtractSettings: "AI Extract Settings",
appearance: "Appearance",
about: "About",
ok: "OK",
mailWebhook: "Mail Webhook",
adminAccount: "Admin",
loginMethod: "Login Method",
loginViaPassword: "Admin Password Login",
loginViaUserAdmin: "User Admin Permission",
loginViaDisabledCheck: "Disabled Password Check",
logout: "Logout",
logoutConfirmTitle: "Confirm Logout",
logoutConfirmContent: "Are you sure you want to logout from admin panel?",
confirm: "Confirm",
logoutSuccess: "Logout successful"
},
zh: {
accessHeader: "Admin \u5BC6\u7801",
accessTip: "\u8BF7\u8F93\u5165 Admin \u5BC6\u7801",
mails: "\u90AE\u4EF6",
sendMail: "\u53D1\u9001\u90AE\u4EF6",
qucickSetup: "\u5FEB\u901F\u8BBE\u7F6E",
account: "\u8D26\u53F7",
account_create: "\u521B\u5EFA\u8D26\u53F7",
account_settings: "\u8D26\u53F7\u8BBE\u7F6E",
user: "\u7528\u6237",
user_management: "\u7528\u6237\u7BA1\u7406",
user_settings: "\u7528\u6237\u8BBE\u7F6E",
userOauth2Settings: "Oauth2 \u8BBE\u7F6E",
roleAddressConfig: "\u89D2\u8272\u5730\u5740\u914D\u7F6E",
unknow: "\u65E0\u6536\u4EF6\u4EBA\u90AE\u4EF6",
senderAccess: "\u53D1\u4EF6\u6743\u9650\u63A7\u5236",
sendBox: "\u53D1\u4EF6\u7BB1",
telegram: "\u7535\u62A5\u673A\u5668\u4EBA",
webhookSettings: "Webhook \u8BBE\u7F6E",
statistics: "\u7EDF\u8BA1",
maintenance: "\u7EF4\u62A4",
database: "\u6570\u636E\u5E93",
workerconfig: "Worker \u914D\u7F6E",
ipBlacklistSettings: "IP \u9ED1\u540D\u5355",
aiExtractSettings: "AI \u63D0\u53D6\u8BBE\u7F6E",
appearance: "\u5916\u89C2",
about: "\u5173\u4E8E",
ok: "\u786E\u5B9A",
mailWebhook: "\u90AE\u4EF6 Webhook",
adminAccount: "\u7BA1\u7406\u5458",
loginMethod: "\u767B\u5F55\u65B9\u5F0F",
loginViaPassword: "Admin \u5BC6\u7801\u767B\u5F55",
loginViaUserAdmin: "\u7528\u6237\u7BA1\u7406\u5458\u6743\u9650",
loginViaDisabledCheck: "\u5DF2\u7981\u7528\u5BC6\u7801\u68C0\u67E5",
logout: "\u9000\u51FA\u767B\u5F55",
logoutConfirmTitle: "\u786E\u8BA4\u9000\u51FA",
logoutConfirmContent: "\u786E\u5B9A\u8981\u9000\u51FA\u7BA1\u7406\u5458\u9762\u677F\u5417\uFF1F",
confirm: "\u786E\u8BA4",
logoutSuccess: "\u9000\u51FA\u6210\u529F"
}
}
}), w = xe(() => !p.value || r.value), N = f(""), K = xe(() => !!d.value), D = xe(() => d.value ? u("loginViaPassword") : s.value.is_admin ? u("loginViaUserAdmin") : y.value.disableAdminPasswordCheck ? u("loginViaDisabledCheck") : "");
return le(async () => {
s.value.user_id || await P.getUserSettings(g);
}), (A, I) => {
const q = pe, W = O, k = Ee, $ = zt, B = Bt, Y = Le, se = ut, _e = Ve, S = de;
return a(s).fetched ? (E(), Q("div", Hl, [
e(k, {
show: w.value,
"onUpdate:show": I[1] || (I[1] = (R) => w.value = R),
closable: false,
closeOnEsc: false,
maskClosable: false,
preset: "dialog",
title: a(u)("accessHeader")
}, {
action: t(() => [
e(W, {
onClick: x,
type: "primary",
loading: a(n)
}, {
default: t(() => [
m(o(a(u)("ok")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(a(u)("accessTip")), 1),
e(q, {
value: N.value,
"onUpdate:value": I[0] || (I[0] = (R) => N.value = R),
type: "password",
"show-password-on": "click"
}, null, 8, [
"value"
])
]),
_: 1
}, 8, [
"show",
"title"
]),
a(p) ? (E(), X(B, {
key: 0,
type: "card",
value: a(l),
"onUpdate:value": I[3] || (I[3] = (R) => ot(l) ? l.value = R : null),
placement: a(v)
}, {
default: t(() => [
e($, {
name: "qucickSetup",
tab: a(u)("qucickSetup")
}, {
default: t(() => [
e(B, {
type: "bar",
"justify-content": "center",
animated: ""
}, {
default: t(() => [
e($, {
name: "database",
tab: a(u)("database")
}, {
default: t(() => [
e(Ct)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "account_settings",
tab: a(u)("account_settings")
}, {
default: t(() => [
e(wt)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "user_settings",
tab: a(u)("user_settings")
}, {
default: t(() => [
e(kt)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "workerconfig",
tab: a(u)("workerconfig")
}, {
default: t(() => [
e(At)
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "account",
tab: a(u)("account")
}, {
default: t(() => [
e(B, {
type: "bar",
"justify-content": "center",
animated: ""
}, {
default: t(() => [
e($, {
name: "account",
tab: a(u)("account")
}, {
default: t(() => [
e(Ka)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "account_create",
tab: a(u)("account_create")
}, {
default: t(() => [
e(Qa)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "account_settings",
tab: a(u)("account_settings")
}, {
default: t(() => [
e(wt)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "senderAccess",
tab: a(u)("senderAccess")
}, {
default: t(() => [
e(Ba)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "ipBlacklistSettings",
tab: a(u)("ipBlacklistSettings")
}, {
default: t(() => [
e(ql)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "aiExtractSettings",
tab: a(u)("aiExtractSettings")
}, {
default: t(() => [
e(Wl)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "webhook",
tab: a(u)("webhookSettings")
}, {
default: t(() => [
e(Dl)
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "user",
tab: a(u)("user")
}, {
default: t(() => [
e(B, {
type: "bar",
"justify-content": "center",
animated: ""
}, {
default: t(() => [
e($, {
name: "user_management",
tab: a(u)("user_management")
}, {
default: t(() => [
e(rl)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "user_settings",
tab: a(u)("user_settings")
}, {
default: t(() => [
e(kt)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "userOauth2Settings",
tab: a(u)("userOauth2Settings")
}, {
default: t(() => [
e(_l)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "roleAddressConfig",
tab: a(u)("roleAddressConfig")
}, {
default: t(() => [
e(gl)
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "mails",
tab: a(u)("mails")
}, {
default: t(() => [
e(B, {
type: "bar",
"justify-content": "center",
animated: ""
}, {
default: t(() => [
e($, {
name: "mails",
tab: a(u)("mails")
}, {
default: t(() => [
e(yl)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "unknow",
tab: a(u)("unknow")
}, {
default: t(() => [
e(kl)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "sendBox",
tab: a(u)("sendBox")
}, {
default: t(() => [
e(qa)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "sendMail",
tab: a(u)("sendMail")
}, {
default: t(() => [
e(a(c))
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "mailWebhook",
tab: a(u)("mailWebhook")
}, {
default: t(() => [
e(Rl)
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "telegram",
tab: a(u)("telegram")
}, {
default: t(() => [
e(Tl)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "statistics",
tab: a(u)("statistics")
}, {
default: t(() => [
e(Oa)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "maintenance",
tab: a(u)("maintenance")
}, {
default: t(() => [
e(B, {
type: "bar",
"justify-content": "center",
animated: ""
}, {
default: t(() => [
e($, {
name: "database",
tab: a(u)("database")
}, {
default: t(() => [
e(Ct)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "workerconfig",
tab: a(u)("workerconfig")
}, {
default: t(() => [
e(At)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "maintenance",
tab: a(u)("maintenance")
}, {
default: t(() => [
e(Al)
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
})
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "appearance",
tab: a(u)("appearance")
}, {
default: t(() => [
e(ua)
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "adminAccount",
tab: a(u)("adminAccount")
}, {
default: t(() => [
M("div", Kl, [
e(S, {
style: {
width: "600px"
}
}, {
default: t(() => [
e(_e, {
vertical: ""
}, {
default: t(() => [
e(Y, {
strong: ""
}, {
default: t(() => [
m(o(a(u)("loginMethod")), 1)
]),
_: 1
}),
e(Y, null, {
default: t(() => [
m(o(D.value), 1)
]),
_: 1
}),
K.value ? (E(), X(se, {
key: 0
})) : Z("", true),
K.value ? (E(), X(W, {
key: 1,
type: "warning",
onClick: I[2] || (I[2] = (R) => C.value = true),
block: ""
}, {
default: t(() => [
m(o(a(u)("logout")), 1)
]),
_: 1
})) : Z("", true)
]),
_: 1
})
]),
_: 1
})
])
]),
_: 1
}, 8, [
"tab"
]),
e($, {
name: "about",
tab: a(u)("about")
}, {
default: t(() => [
e(da)
]),
_: 1
}, 8, [
"tab"
])
]),
_: 1
}, 8, [
"value",
"placement"
])) : Z("", true),
e(k, {
show: C.value,
"onUpdate:show": I[4] || (I[4] = (R) => C.value = R),
preset: "dialog",
title: a(u)("logoutConfirmTitle")
}, {
action: t(() => [
e(W, {
loading: a(n),
onClick: L,
size: "small",
tertiary: "",
type: "warning"
}, {
default: t(() => [
m(o(a(u)("confirm")), 1)
]),
_: 1
}, 8, [
"loading"
])
]),
default: t(() => [
M("p", null, o(a(u)("logoutConfirmContent")), 1)
]),
_: 1
}, 8, [
"show",
"title"
])
])) : Z("", true);
};
}
};
Ql = ee(Gl, [
[
"__scopeId",
"data-v-ef349626"
]
]);
});
export {
__tla,
Ql as default
};