300 lines
12 KiB
Vue
300 lines
12 KiB
Vue
<script>
|
|
/** 账号设置中的微信关注与推送开关;仅在站点启用扫码功能时读取关联状态。 */
|
|
import "~/assets/styles/WechatConnection.DI5ko1xy.css";
|
|
import { toDisplayString } from "vue";
|
|
import { onMounted } from "vue";
|
|
import { onBeforeUnmount } from "vue";
|
|
import { watch } from "vue";
|
|
import { createBlock } from "vue";
|
|
import { ref } from "vue";
|
|
import { withCtx } from "vue";
|
|
import { createCommentVNode } from "vue";
|
|
import { createElementBlock } from "vue";
|
|
import { Fragment } from "vue";
|
|
import { createElementVNode } from "vue";
|
|
import { createTextVNode } from "vue";
|
|
import { unref } from "vue";
|
|
import { defineComponent } from "vue";
|
|
import { createVNode } from "vue";
|
|
import { openBlock } from "vue";
|
|
import { useApi } from "~/lib/auth.js";
|
|
import { t as useSiteConfig_t } from "~/lib/useSiteConfig.js";
|
|
import button from "primevue/button";
|
|
import { t as _plugin_vue_export_helper_t } from "~/lib/_plugin-vue_export-helper.js";
|
|
import message from "primevue/message";
|
|
import tag from "primevue/tag";
|
|
import skeleton from "primevue/skeleton";
|
|
import toggleswitch from "primevue/toggleswitch";
|
|
var w = {
|
|
key: 0,
|
|
class: `wechat-connection`,
|
|
"aria-label": `微信公众号`,
|
|
},
|
|
T = {
|
|
key: 1,
|
|
class: `connection-list wechat-loading`,
|
|
role: `status`,
|
|
"aria-label": `正在读取微信关联信息`,
|
|
},
|
|
E = {
|
|
class: `connection-list`,
|
|
},
|
|
D = {
|
|
class: `connection-provider`,
|
|
},
|
|
O = {
|
|
class: `connection-provider-main`,
|
|
},
|
|
k = {
|
|
key: 0,
|
|
class: `connection-provider`,
|
|
},
|
|
A = {
|
|
key: 0,
|
|
class: `account-management-note wechat-binding-help`,
|
|
},
|
|
j = Object.assign(
|
|
_plugin_vue_export_helper_t(
|
|
defineComponent({
|
|
__name: `WechatConnection`,
|
|
setup(p) {
|
|
let y = useApi(),
|
|
j = useSiteConfig_t(),
|
|
M = ref(null),
|
|
N = ref(``),
|
|
P = ref(!1),
|
|
F = ref(!1),
|
|
I = !0,
|
|
L = 0;
|
|
async function R() {
|
|
// 状态字段限定为 0/1,重试或关闭功能会推进代次,旧响应不能恢复已隐藏的关联信息。
|
|
if (!j.scanLoginEnabled.value || !I) return;
|
|
let e = ++L;
|
|
((F.value = !0), (N.value = ``));
|
|
try {
|
|
let t = await y.get(`/mp_weixin_notice/client`);
|
|
if (!I || e !== L) return;
|
|
if (
|
|
![0, 1].includes(Number(t.is_subscribe)) ||
|
|
![0, 1].includes(Number(t.accept_push))
|
|
)
|
|
throw Error(`微信关联状态无效,请重试`);
|
|
M.value = {
|
|
is_subscribe: Number(t.is_subscribe),
|
|
accept_push: Number(t.accept_push),
|
|
};
|
|
} catch (t) {
|
|
I &&
|
|
e === L &&
|
|
(N.value =
|
|
t instanceof Error ? t.message : `微信关联信息加载失败`);
|
|
} finally {
|
|
I && e === L && (F.value = !1);
|
|
}
|
|
}
|
|
async function z() {
|
|
// 仅已关注账号可切换推送,保存后重新回读服务端状态,不假设开关已生效。
|
|
if (!(!I || P.value || F.value || M.value?.is_subscribe !== 1)) {
|
|
((P.value = !0), (N.value = ``));
|
|
try {
|
|
(await y.put(`/mp_weixin_notice/accept_push`, {
|
|
status: M.value.accept_push === 1 ? 0 : 1,
|
|
}),
|
|
I && (await R()));
|
|
} catch (e) {
|
|
I &&
|
|
(N.value =
|
|
e instanceof Error ? e.message : `推送设置保存失败`);
|
|
} finally {
|
|
I && (P.value = !1);
|
|
}
|
|
}
|
|
}
|
|
return (
|
|
watch(j.scanLoginEnabled, () => {
|
|
j.scanLoginEnabled.value ? R() : (L++, (M.value = null));
|
|
}),
|
|
onMounted(async () => {
|
|
(await j.load(), await R());
|
|
}),
|
|
onBeforeUnmount(() => {
|
|
((I = !1), L++);
|
|
}),
|
|
(t, n) => {
|
|
let r = button,
|
|
a = message,
|
|
p = skeleton,
|
|
g = tag,
|
|
_ = toggleswitch;
|
|
return unref(j).scanLoginEnabled.value
|
|
? (openBlock(),
|
|
createElementBlock(`section`, w, [
|
|
(n[2] ||= createElementVNode(
|
|
`h3`,
|
|
{
|
|
class: `connection-section-title`,
|
|
},
|
|
`微信公众号`,
|
|
-1,
|
|
)),
|
|
unref(N)
|
|
? (openBlock(),
|
|
createBlock(
|
|
a,
|
|
{
|
|
key: 0,
|
|
severity: `error`,
|
|
closable: !1,
|
|
},
|
|
{
|
|
default: withCtx(() => [
|
|
createTextVNode(
|
|
toDisplayString(unref(N)) + ` `,
|
|
1,
|
|
),
|
|
createVNode(
|
|
r,
|
|
{
|
|
label: `重试`,
|
|
size: `small`,
|
|
text: ``,
|
|
severity: `secondary`,
|
|
disabled: unref(P),
|
|
onClick: R,
|
|
},
|
|
null,
|
|
8,
|
|
[`disabled`],
|
|
),
|
|
]),
|
|
_: 1,
|
|
},
|
|
))
|
|
: createCommentVNode(``, !0),
|
|
unref(F)
|
|
? (openBlock(),
|
|
createElementBlock(`div`, T, [
|
|
createVNode(p, {
|
|
width: `40%`,
|
|
height: `20px`,
|
|
}),
|
|
createVNode(p, {
|
|
width: `65%`,
|
|
height: `16px`,
|
|
}),
|
|
]))
|
|
: unref(M)
|
|
? (openBlock(),
|
|
createElementBlock(
|
|
Fragment,
|
|
{
|
|
key: 2,
|
|
},
|
|
[
|
|
createElementVNode(`div`, E, [
|
|
createElementVNode(`div`, D, [
|
|
createElementVNode(`div`, O, [
|
|
(n[0] ||= createElementVNode(
|
|
`strong`,
|
|
null,
|
|
`关联状态`,
|
|
-1,
|
|
)),
|
|
createElementVNode(
|
|
`p`,
|
|
null,
|
|
toDisplayString(
|
|
unref(M).is_subscribe === 1
|
|
? `已关注并关联`
|
|
: `尚未关注或关联`,
|
|
),
|
|
1,
|
|
),
|
|
]),
|
|
createVNode(
|
|
g,
|
|
{
|
|
value:
|
|
unref(M).is_subscribe === 1
|
|
? `已关联`
|
|
: `未关联`,
|
|
severity:
|
|
unref(M).is_subscribe === 1
|
|
? `success`
|
|
: `secondary`,
|
|
},
|
|
null,
|
|
8,
|
|
[`value`, `severity`],
|
|
),
|
|
]),
|
|
unref(M).is_subscribe === 1
|
|
? (openBlock(),
|
|
createElementBlock(`div`, k, [
|
|
(n[1] ||= createElementVNode(
|
|
`div`,
|
|
{
|
|
class: `connection-provider-main`,
|
|
},
|
|
[
|
|
createElementVNode(`strong`, null, [
|
|
createElementVNode(
|
|
`label`,
|
|
{
|
|
for: `wechat-notifications`,
|
|
},
|
|
`接收微信通知`,
|
|
),
|
|
]),
|
|
createElementVNode(
|
|
`p`,
|
|
null,
|
|
`通过公众号接收账户和服务通知`,
|
|
),
|
|
],
|
|
-1,
|
|
)),
|
|
createVNode(
|
|
_,
|
|
{
|
|
"input-id": `wechat-notifications`,
|
|
"model-value":
|
|
unref(M).accept_push === 1,
|
|
disabled: unref(P) || unref(F),
|
|
"onUpdate:modelValue": z,
|
|
},
|
|
null,
|
|
8,
|
|
[`model-value`, `disabled`],
|
|
),
|
|
]))
|
|
: createCommentVNode(``, !0),
|
|
]),
|
|
unref(M).is_subscribe === 1
|
|
? createCommentVNode(``, !0)
|
|
: (openBlock(),
|
|
createElementBlock(
|
|
`p`,
|
|
A,
|
|
`使用微信扫码登录,并验证已注册的手机号或邮箱完成关联。`,
|
|
)),
|
|
],
|
|
64,
|
|
))
|
|
: createCommentVNode(``, !0),
|
|
]))
|
|
: createCommentVNode(``, !0);
|
|
}
|
|
);
|
|
},
|
|
}),
|
|
[[`__scopeId`, `data-v-4c933481`]],
|
|
),
|
|
{
|
|
__name: `WechatConnection`,
|
|
},
|
|
);
|
|
export {};
|
|
export default j;
|
|
</script>
|