docs: annotate account commerce finance and content pages
This commit is contained in:
1 parent
60827b8bfb
commit
2be21c1c62
24 files changed
+223
No files matched your search
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* API 密钥管理:列表分页、创建、IP 白名单编辑及删除。私钥仅在创建响应中保留,关闭弹窗或离开页面即清空,不能视为可再次查询的资料。
|
||||||
|
*/
|
||||||
import "~/assets/styles/api-keys.Bq3Csr53.css";
|
import "~/assets/styles/api-keys.Bq3Csr53.css";
|
||||||
import { toDisplayString } from "vue";
|
import { toDisplayString } from "vue";
|
||||||
import { onMounted } from "vue";
|
import { onMounted } from "vue";
|
||||||
@@ -33,6 +36,7 @@ import paginator from "primevue/paginator";
|
|||||||
import checkbox from "primevue/checkbox";
|
import checkbox from "primevue/checkbox";
|
||||||
import column from "primevue/column";
|
import column from "primevue/column";
|
||||||
import textarea from "primevue/textarea";
|
import textarea from "primevue/textarea";
|
||||||
|
// 集中管理列表权限、写操作忙碌态和仅本次可见的私钥;请求代次与存活标记防止旧响应更新已离开的页面。
|
||||||
function D() {
|
function D() {
|
||||||
let e = useApi(),
|
let e = useApi(),
|
||||||
t = ref([]),
|
t = ref([]),
|
||||||
@@ -60,6 +64,7 @@ function D() {
|
|||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
((v = !1), y++, b());
|
((v = !1), y++, b());
|
||||||
});
|
});
|
||||||
|
// 刷新当前页并读取服务端 create_api 权限;响应结构无效时不开放创建入口。
|
||||||
async function x() {
|
async function x() {
|
||||||
if (!v) return;
|
if (!v) return;
|
||||||
let n = ++y;
|
let n = ++y;
|
||||||
@@ -86,6 +91,7 @@ function D() {
|
|||||||
v && n === y && (o.value = !1);
|
v && n === y && (o.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 只在权限已加载且允许创建时提交。创建响应不完整时提示先刷新核实,避免误以为失败而重复生成密钥。
|
||||||
async function C() {
|
async function C() {
|
||||||
if (!(!v || s.value || m.value)) {
|
if (!(!v || s.value || m.value)) {
|
||||||
if (((d.value = ``), (f.value = ``), !l.value || o.value)) {
|
if (((d.value = ``), (f.value = ``), !l.value || o.value)) {
|
||||||
@@ -123,6 +129,7 @@ function D() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 打开白名单编辑器时复制行数据,未保存的输入不直接修改列表。
|
||||||
function w(e) {
|
function w(e) {
|
||||||
s.value ||
|
s.value ||
|
||||||
((d.value = ``),
|
((d.value = ``),
|
||||||
@@ -131,6 +138,7 @@ function D() {
|
|||||||
(g.enabled = Number(e.status) === 1),
|
(g.enabled = Number(e.status) === 1),
|
||||||
(g.ip = e.ip || ``));
|
(g.ip = e.ip || ``));
|
||||||
}
|
}
|
||||||
|
// 开启白名单必须提供 IP;保存成功后关闭编辑器并重新读取服务端数据。
|
||||||
async function T() {
|
async function T() {
|
||||||
if (!v || s.value || !h.value) return;
|
if (!v || s.value || !h.value) return;
|
||||||
if (((d.value = ``), (f.value = ``), g.enabled && !g.ip.trim())) {
|
if (((d.value = ``), (f.value = ``), g.enabled && !g.ip.trim())) {
|
||||||
@@ -155,6 +163,7 @@ function D() {
|
|||||||
v && (s.value = !1);
|
v && (s.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 删除成功后,若当前页只剩这一条则回退一页,再刷新列表。
|
||||||
async function E() {
|
async function E() {
|
||||||
if (v && !s.value && _.value?.id) {
|
if (v && !s.value && _.value?.id) {
|
||||||
((d.value = ``), (f.value = ``), (s.value = !0));
|
((d.value = ``), (f.value = ``), (s.value = !0));
|
||||||
@@ -271,6 +280,7 @@ var O = {
|
|||||||
!e && !N.value && (U.value = null);
|
!e && !N.value && (U.value = null);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
// 复制创建时返回的私钥;剪贴板不可用时保留手动复制提示,不把私钥写入持久存储。
|
||||||
async function he() {
|
async function he() {
|
||||||
if (z.value) {
|
if (z.value) {
|
||||||
J.value = ``;
|
J.value = ``;
|
||||||
@@ -282,9 +292,11 @@ var O = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 关闭私钥展示同时清空密钥与复制反馈,避免之后再次暴露。
|
||||||
function Z() {
|
function Z() {
|
||||||
(B(), (q.value = !1), (J.value = ``));
|
(B(), (q.value = !1), (J.value = ``));
|
||||||
}
|
}
|
||||||
|
// 分页器为零基页码,接口页码从 1 开始。
|
||||||
function ge(e) {
|
function ge(e) {
|
||||||
((S.value = e.page + 1), W());
|
((S.value = e.page + 1), W());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 第三方账号关联管理:从账户资料整理 OAuth 绑定状态,通过公共 OAuth 流程发起关联,并确认后解除绑定。
|
||||||
|
*/
|
||||||
import "~/assets/styles/WechatConnection.DI5ko1xy.css";
|
import "~/assets/styles/WechatConnection.DI5ko1xy.css";
|
||||||
import { toDisplayString } from "vue";
|
import { toDisplayString } from "vue";
|
||||||
import { renderList } from "vue";
|
import { renderList } from "vue";
|
||||||
@@ -77,6 +80,7 @@ var D = {
|
|||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
J = !1;
|
J = !1;
|
||||||
});
|
});
|
||||||
|
// 读取 /account 的 OAuth 关联列表;组件卸载后的响应不再更新界面。
|
||||||
async function Y() {
|
async function Y() {
|
||||||
if (!R.value) {
|
if (!R.value) {
|
||||||
((R.value = !0), (z.value = ``));
|
((R.value = !0), (z.value = ``));
|
||||||
@@ -91,6 +95,7 @@ var D = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 仅对已关联的提供方执行解绑;请求完成后重新加载列表,以服务端结果为准。
|
||||||
async function X() {
|
async function X() {
|
||||||
if (U.value?.linked && !H.value && !W.value && J) {
|
if (U.value?.linked && !H.value && !W.value && J) {
|
||||||
((H.value = !0), (z.value = ``), (B.value = ``));
|
((H.value = !0), (z.value = ``), (B.value = ``));
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 账户设置聚合页:资料、登录密码、操作密码、手机、邮箱和流量预警分别维护表单与提交状态;敏感修改可由安全验证弹窗续接原请求。
|
||||||
|
*/
|
||||||
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
||||||
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
@@ -324,6 +327,7 @@ var Ce = {
|
|||||||
label: `流量预警`,
|
label: `流量预警`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
// 为账户设置标签提供左右方向键及 Home/End 导航,并同步实际焦点。
|
||||||
function Xt(e, t) {
|
function Xt(e, t) {
|
||||||
let n = t;
|
let n = t;
|
||||||
if (e.key === `ArrowRight`) n = (t + 1) % E.length;
|
if (e.key === `ArrowRight`) n = (t + 1) % E.length;
|
||||||
@@ -336,6 +340,7 @@ var Ce = {
|
|||||||
document.getElementById(`account-tab-${T.value}`)?.focus());
|
document.getElementById(`account-tab-${T.value}`)?.focus());
|
||||||
}
|
}
|
||||||
let Zt = ref([]);
|
let Zt = ref([]);
|
||||||
|
// 加载账户并回填资料表单,同时决定手机、邮箱是否需要先验证旧联系方式。
|
||||||
async function Qt() {
|
async function Qt() {
|
||||||
Gt.value = !0;
|
Gt.value = !0;
|
||||||
try {
|
try {
|
||||||
@@ -354,6 +359,7 @@ var Ce = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
let $t = ref(!1);
|
let $t = ref(!1);
|
||||||
|
// 国家选项按需加载;失败时保留空选项,后续仍可重新尝试。
|
||||||
async function en() {
|
async function en() {
|
||||||
if (!$t.value)
|
if (!$t.value)
|
||||||
try {
|
try {
|
||||||
@@ -380,9 +386,11 @@ var Ce = {
|
|||||||
function N(e, t) {
|
function N(e, t) {
|
||||||
D.value = e instanceof Error ? e.message : t;
|
D.value = e instanceof Error ? e.message : t;
|
||||||
}
|
}
|
||||||
|
// 暂存安全挑战及原操作闭包,验证成功后以原表单快照继续提交。
|
||||||
function rn(e, t) {
|
function rn(e, t) {
|
||||||
((tn.value = e), (A.value = t), (k.value = !0));
|
((tn.value = e), (A.value = t), (k.value = !0));
|
||||||
}
|
}
|
||||||
|
// 把安全验证结果交给待续接操作;再次出现挑战时更新弹窗,不把尚未验证的结果当成功。
|
||||||
async function an(e) {
|
async function an(e) {
|
||||||
if (A.value && !j.value) {
|
if (A.value && !j.value) {
|
||||||
((j.value = !0), (D.value = ``));
|
((j.value = !0), (D.value = ``));
|
||||||
@@ -405,6 +413,7 @@ var Ce = {
|
|||||||
country_id: null,
|
country_id: null,
|
||||||
}),
|
}),
|
||||||
on = ref(!1);
|
on = ref(!1);
|
||||||
|
// 保存可编辑资料,同时保留当前账户已有的 language、notes 字段,避免更新接口覆盖它们。
|
||||||
async function sn() {
|
async function sn() {
|
||||||
(M(), (on.value = !0));
|
(M(), (on.value = !0));
|
||||||
try {
|
try {
|
||||||
@@ -424,6 +433,7 @@ var Ce = {
|
|||||||
on.value = !1;
|
on.value = !1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 取消编辑时从账户快照还原表单,不额外写入接口。
|
||||||
function cn() {
|
function cn() {
|
||||||
(M(),
|
(M(),
|
||||||
S.value &&
|
S.value &&
|
||||||
@@ -483,6 +493,7 @@ var Ce = {
|
|||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
((U = !0), clearInterval(gn), (A.value = null));
|
((U = !0), clearInterval(gn), (A.value = null));
|
||||||
}));
|
}));
|
||||||
|
// 向已绑定手机或邮箱发送 verify 验证码;成功后启动 60 秒倒计时,离页时清理计时器。
|
||||||
async function vn() {
|
async function vn() {
|
||||||
if (
|
if (
|
||||||
!(
|
!(
|
||||||
@@ -518,6 +529,7 @@ var Ce = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 根据旧密码或验证码验证方式选择不同接口;密码一致性通过后才提交,安全挑战保留同一份请求数据。
|
||||||
async function yn() {
|
async function yn() {
|
||||||
if (I.value || j.value || k.value || w(`password`)) return;
|
if (I.value || j.value || k.value || w(`password`)) return;
|
||||||
if (
|
if (
|
||||||
@@ -602,6 +614,7 @@ var Ce = {
|
|||||||
G = ref({}),
|
G = ref({}),
|
||||||
Sn = ref(!1),
|
Sn = ref(!1),
|
||||||
Cn = ref(``);
|
Cn = ref(``);
|
||||||
|
// 分别加载云服务器与独立服务器的流量预警;单个模块失败只记录该模块错误。
|
||||||
async function wn() {
|
async function wn() {
|
||||||
((Sn.value = !0), (G.value = {}));
|
((Sn.value = !0), (G.value = {}));
|
||||||
try {
|
try {
|
||||||
@@ -643,12 +656,14 @@ var Ce = {
|
|||||||
Sn.value = !1;
|
Sn.value = !1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 开启预警且未选阈值时提供初始比例;关闭状态的实际提交比例在保存时归零。
|
||||||
function Tn(e, t) {
|
function Tn(e, t) {
|
||||||
let n = +!!t,
|
let n = +!!t,
|
||||||
r = W.value[e];
|
r = W.value[e];
|
||||||
((r.warning_switch = n),
|
((r.warning_switch = n),
|
||||||
n === 1 && !r.leave_percent && (r.leave_percent = xn[1]));
|
n === 1 && !r.leave_percent && (r.leave_percent = xn[1]));
|
||||||
}
|
}
|
||||||
|
// 按模块保存预警开关和剩余流量比例,避免另一模块的草稿被一并提交。
|
||||||
async function En(e) {
|
async function En(e) {
|
||||||
let t = W.value[e];
|
let t = W.value[e];
|
||||||
if (t) {
|
if (t) {
|
||||||
@@ -673,6 +688,7 @@ var Ce = {
|
|||||||
re_operate_password: ``,
|
re_operate_password: ``,
|
||||||
}),
|
}),
|
||||||
Dn = ref(!1);
|
Dn = ref(!1);
|
||||||
|
// 操作密码独立于登录密码;支持安全挑战续接,成功后清空密码输入。
|
||||||
async function On() {
|
async function On() {
|
||||||
if (Dn.value || j.value || k.value) return;
|
if (Dn.value || j.value || k.value) return;
|
||||||
if ((M(), !K.operate_password)) {
|
if ((M(), !K.operate_password)) {
|
||||||
@@ -730,6 +746,7 @@ var Ce = {
|
|||||||
update: useCaptcha_t(`update`),
|
update: useCaptcha_t(`update`),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
// 统一联系方式 verify/update 场景的验证码请求,并由各自验证码实例处理挑战失效。
|
||||||
async function jn(e, t, n = {}) {
|
async function jn(e, t, n = {}) {
|
||||||
let r = An[e][t],
|
let r = An[e][t],
|
||||||
ee = r.validationError();
|
ee = r.validationError();
|
||||||
@@ -746,6 +763,7 @@ var Ce = {
|
|||||||
throw (await r.handleError(e), e);
|
throw (await r.handleError(e), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 向当前绑定手机号发送旧号码验证短信。
|
||||||
async function Mn() {
|
async function Mn() {
|
||||||
if (!(Y.value || w(`phone`))) {
|
if (!(Y.value || w(`phone`))) {
|
||||||
(M(), (Y.value = !0));
|
(M(), (Y.value = !0));
|
||||||
@@ -759,6 +777,7 @@ var Ce = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 旧手机号验证通过后才进入新号码绑定步骤。
|
||||||
async function Nn() {
|
async function Nn() {
|
||||||
(M(), (Y.value = !0));
|
(M(), (Y.value = !0));
|
||||||
try {
|
try {
|
||||||
@@ -773,6 +792,7 @@ var Ce = {
|
|||||||
Y.value = !1;
|
Y.value = !1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 向草稿中的新手机号发送 update 场景验证码。
|
||||||
async function Pn() {
|
async function Pn() {
|
||||||
if (!(Y.value || w(`phone`))) {
|
if (!(Y.value || w(`phone`))) {
|
||||||
(M(), (Y.value = !0));
|
(M(), (Y.value = !0));
|
||||||
@@ -790,6 +810,7 @@ var Ce = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 完成新号码绑定后重载账户,清空新旧验证码并复位步骤。
|
||||||
async function Fn() {
|
async function Fn() {
|
||||||
(M(), (Y.value = !0));
|
(M(), (Y.value = !0));
|
||||||
try {
|
try {
|
||||||
@@ -821,6 +842,7 @@ var Ce = {
|
|||||||
t = e === `phone` ? J.value : Z.value;
|
t = e === `phone` ? J.value : Z.value;
|
||||||
return An[e][t === 1 ? `verify` : `update`];
|
return An[e][t === 1 ? `verify` : `update`];
|
||||||
});
|
});
|
||||||
|
// 向当前绑定邮箱发送旧邮箱验证邮件。
|
||||||
async function Ln() {
|
async function Ln() {
|
||||||
if (!(Q.value || w(`email`))) {
|
if (!(Q.value || w(`email`))) {
|
||||||
(M(), (Q.value = !0));
|
(M(), (Q.value = !0));
|
||||||
@@ -834,6 +856,7 @@ var Ce = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 旧邮箱验证通过后才进入新邮箱绑定步骤。
|
||||||
async function Rn() {
|
async function Rn() {
|
||||||
(M(), (Q.value = !0));
|
(M(), (Q.value = !0));
|
||||||
try {
|
try {
|
||||||
@@ -848,6 +871,7 @@ var Ce = {
|
|||||||
Q.value = !1;
|
Q.value = !1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 向草稿中的新邮箱发送 update 场景验证码。
|
||||||
async function zn() {
|
async function zn() {
|
||||||
if (!(Q.value || w(`email`))) {
|
if (!(Q.value || w(`email`))) {
|
||||||
(M(), (Q.value = !0));
|
(M(), (Q.value = !0));
|
||||||
@@ -864,6 +888,7 @@ var Ce = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 提交新邮箱及验证码;成功后重载账户资料并清空步骤输入。
|
||||||
async function Bn() {
|
async function Bn() {
|
||||||
(M(), (Q.value = !0));
|
(M(), (Q.value = !0));
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 企业实名认证路由适配层:复用统一实名认证页,仅把 initial-type 设为 company;认证状态、接口与上传流程均由统一页负责。
|
||||||
|
*/
|
||||||
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
||||||
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 实名认证流程:个人/企业资料 → 选择渠道及动态字段 → 必要时支付认证费 → 二维码核验与状态轮询。序号将异步结果绑定到当前资料、渠道和核验会话。
|
||||||
|
*/
|
||||||
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
||||||
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
@@ -46,6 +49,7 @@ import tablist from "primevue/tablist";
|
|||||||
import tab from "primevue/tab";
|
import tab from "primevue/tab";
|
||||||
var b = `#contentBox img[src^="data:image/"], #qrcode img, #qrCode img, img#qrcode, img#qrCode, .qrcode img, .qr-code img`,
|
var b = `#contentBox img[src^="data:image/"], #qrcode img, #qrCode img, img#qrcode, img#qrCode, .qrcode img, .qr-code img`,
|
||||||
x = `img[src^="data:image/png;base64,"], img[src^="data:image/jpeg;base64,"]`;
|
x = `img[src^="data:image/png;base64,"], img[src^="data:image/jpeg;base64,"]`;
|
||||||
|
// 从认证服务返回的 HTML 中定位二维码,保留其动态更新逻辑并隐藏其余内容;无法唯一定位时拒绝展示。
|
||||||
function S(e) {
|
function S(e) {
|
||||||
let t = new DOMParser().parseFromString(e, `text/html`),
|
let t = new DOMParser().parseFromString(e, `text/html`),
|
||||||
n =
|
n =
|
||||||
@@ -454,6 +458,7 @@ var xe = {
|
|||||||
flush: `sync`,
|
flush: `sync`,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
// 只收集已上传的图片标识,空字段不随申请发送。
|
||||||
function At() {
|
function At() {
|
||||||
let e = {};
|
let e = {};
|
||||||
for (let [t, n] of Object.entries(G)) n && (e[t] = n);
|
for (let [t, n] of Object.entries(G)) n && (e[t] = n);
|
||||||
@@ -466,9 +471,11 @@ var xe = {
|
|||||||
Q = null,
|
Q = null,
|
||||||
$ = 0,
|
$ = 0,
|
||||||
Mt = 0;
|
Mt = 0;
|
||||||
|
// 结束当前核验轮询并提升会话序号,使已在途回调失效。
|
||||||
function Nt() {
|
function Nt() {
|
||||||
($++, Q !== null && (clearTimeout(Q), (Q = null)), (jt.value = !1));
|
($++, Q !== null && (clearTimeout(Q), (Q = null)), (jt.value = !1));
|
||||||
}
|
}
|
||||||
|
// 读取实名开关及个人/企业状态;仅最新请求可以写入当前页面。
|
||||||
async function Pt() {
|
async function Pt() {
|
||||||
let e = ++M;
|
let e = ++M;
|
||||||
((xt.value = !0), (z.value = ``));
|
((xt.value = !0), (z.value = ``));
|
||||||
@@ -483,11 +490,13 @@ var xe = {
|
|||||||
!N && e === M && (xt.value = !1);
|
!N && e === M && (xt.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 切换渠道或关闭弹窗时清理动态字段与加载标识,同时使旧字段请求失效。
|
||||||
function Ft() {
|
function Ft() {
|
||||||
(j++, (_t.value = ``), (A.value = ``), (k.value = !1));
|
(j++, (_t.value = ``), (A.value = ``), (k.value = !1));
|
||||||
for (let e of Object.keys(O)) delete O[e];
|
for (let e of Object.keys(O)) delete O[e];
|
||||||
gt.value = [];
|
gt.value = [];
|
||||||
}
|
}
|
||||||
|
// 兼容服务端布尔、数字和字符串形式的必填标识。
|
||||||
function It(e) {
|
function It(e) {
|
||||||
return (
|
return (
|
||||||
e.required === !0 ||
|
e.required === !0 ||
|
||||||
@@ -496,6 +505,7 @@ var xe = {
|
|||||||
e.required === `true`
|
e.required === `true`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 将数组、对象、JSON 字符串或逗号列表整理为选择项,供认证渠道动态表单使用。
|
||||||
function Lt(e) {
|
function Lt(e) {
|
||||||
if (Array.isArray(e))
|
if (Array.isArray(e))
|
||||||
return e.map((e) => ({
|
return e.map((e) => ({
|
||||||
@@ -521,6 +531,7 @@ var xe = {
|
|||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
// 加载当前认证类型与渠道的动态字段;请求结束时同时核对渠道、类型、弹窗状态和代次。
|
||||||
async function Rt(e) {
|
async function Rt(e) {
|
||||||
Ft();
|
Ft();
|
||||||
let t = j,
|
let t = j,
|
||||||
@@ -553,6 +564,7 @@ var xe = {
|
|||||||
i() && (k.value = !1);
|
i() && (k.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 验证个人资料及要求上传的证件后,暂存申请并进入渠道选择。
|
||||||
async function zt() {
|
async function zt() {
|
||||||
if (!(W.value || C.value || Y.value || P.value || !Dt.value)) {
|
if (!(W.value || C.value || Y.value || P.value || !Dt.value)) {
|
||||||
if (((z.value = ``), K.value))
|
if (((z.value = ``), K.value))
|
||||||
@@ -569,6 +581,7 @@ var xe = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 企业申请额外校验企业实名开关、个人认证前置条件、营业执照和必要的委托书。
|
||||||
async function Bt() {
|
async function Bt() {
|
||||||
if (!(
|
if (!(
|
||||||
W.value ||
|
W.value ||
|
||||||
@@ -597,6 +610,7 @@ var xe = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 保存待提交的资料快照;渠道选择不直接修改原始表单。
|
||||||
async function Vt(e, t) {
|
async function Vt(e, t) {
|
||||||
((F.value = null),
|
((F.value = null),
|
||||||
(D.value = {
|
(D.value = {
|
||||||
@@ -607,6 +621,7 @@ var xe = {
|
|||||||
(C.value = !0),
|
(C.value = !0),
|
||||||
await Ht());
|
await Ht());
|
||||||
}
|
}
|
||||||
|
// 加载可用认证插件,使用独立代次隔离弹窗重开或重试。
|
||||||
async function Ht() {
|
async function Ht() {
|
||||||
if (!C.value || W.value) return;
|
if (!C.value || W.value) return;
|
||||||
let e = ++I;
|
let e = ++I;
|
||||||
@@ -625,6 +640,7 @@ var xe = {
|
|||||||
e === I && (w.value = !1);
|
e === I && (w.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 非提交期间允许关闭渠道弹窗,并使其异步加载结果失效。
|
||||||
function Ut() {
|
function Ut() {
|
||||||
W.value ||
|
W.value ||
|
||||||
(I++,
|
(I++,
|
||||||
@@ -635,6 +651,7 @@ var xe = {
|
|||||||
Ft(),
|
Ft(),
|
||||||
(D.value = null));
|
(D.value = null));
|
||||||
}
|
}
|
||||||
|
// 确认动态字段与当前渠道一致后检查渠道费用;需要付费时先保存申请快照并打开支付,不提前提交认证。
|
||||||
async function Wt() {
|
async function Wt() {
|
||||||
if (!C.value || w.value || W.value || !D.value) return;
|
if (!C.value || w.value || W.value || !D.value) return;
|
||||||
let e = L.value.find((e) => e.name === E.value);
|
let e = L.value.find((e) => e.name === E.value);
|
||||||
@@ -720,6 +737,7 @@ var xe = {
|
|||||||
r === I && (W.value = !1);
|
r === I && (W.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 已通过个人认证的企业升级走 convert,其余申请走 person/company;渠道字段随同原资料提交。
|
||||||
async function Gt(e, t, n, r) {
|
async function Gt(e, t, n, r) {
|
||||||
let i =
|
let i =
|
||||||
e === `company` && Number(R.value?.person?.status) === 1
|
e === `company` && Number(R.value?.person?.status) === 1
|
||||||
@@ -731,6 +749,7 @@ var xe = {
|
|||||||
plugin_name: n,
|
plugin_name: n,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 支付回调后再次查询渠道订单,确认同一订单已 Paid 才续交认证,不能仅凭前端支付事件认定到账。
|
||||||
async function Kt() {
|
async function Kt() {
|
||||||
let e = F.value;
|
let e = F.value;
|
||||||
if (!e || W.value || N) return;
|
if (!e || W.value || N) return;
|
||||||
@@ -764,9 +783,11 @@ var xe = {
|
|||||||
!N && t === I && (W.value = !1);
|
!N && t === I && (W.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 重新打开待支付认证订单,不重复生成申请快照。
|
||||||
function qt() {
|
function qt() {
|
||||||
!W.value && F.value && (P.value = !0);
|
!W.value && F.value && (P.value = !0);
|
||||||
}
|
}
|
||||||
|
// 开启新的二维码核验会话,先获取二维码,再为当前认证类型启动轮询。
|
||||||
async function Jt(e = V.value === 1 ? `company` : `person`) {
|
async function Jt(e = V.value === 1 ? `company` : `person`) {
|
||||||
Nt();
|
Nt();
|
||||||
let t = $;
|
let t = $;
|
||||||
@@ -777,6 +798,7 @@ var xe = {
|
|||||||
await Xt(t),
|
await Xt(t),
|
||||||
t === $ && Y.value && Zt(t, e));
|
t === $ && Y.value && Zt(t, e));
|
||||||
}
|
}
|
||||||
|
// 认证资料失效或变更时终止旧核验并刷新资料,要求用户重新提交。
|
||||||
async function Yt(e) {
|
async function Yt(e) {
|
||||||
if (![`10000`, `10001`].includes(String(e))) return !1;
|
if (![`10000`, `10001`].includes(String(e))) return !1;
|
||||||
Qt();
|
Qt();
|
||||||
@@ -792,6 +814,7 @@ var xe = {
|
|||||||
!0
|
!0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 按当前核验会话加载二维码,并设置刷新时间门槛;过期会话的响应不再显示。
|
||||||
async function Xt(e) {
|
async function Xt(e) {
|
||||||
if (e === $ && Y.value) {
|
if (e === $ && Y.value) {
|
||||||
((Z.value = !0), (Mt = Date.now() + (X.value ? 3e4 : 1e4)));
|
((Z.value = !0), (Mt = Date.now() + (X.value ? 3e4 : 1e4)));
|
||||||
@@ -819,6 +842,7 @@ var xe = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 每两秒查询核验状态;第三方完成后仍复查本平台认证资料,区别认证成功与进入审核,关闭后停止调度。
|
||||||
function Zt(e, t) {
|
function Zt(e, t) {
|
||||||
jt.value = !0;
|
jt.value = !0;
|
||||||
let n = () => e === $ && Y.value;
|
let n = () => e === $ && Y.value;
|
||||||
@@ -874,6 +898,7 @@ var xe = {
|
|||||||
}
|
}
|
||||||
Q = setTimeout(r, 2e3);
|
Q = setTimeout(r, 2e3);
|
||||||
}
|
}
|
||||||
|
// 关闭二维码核验并清空 HTML,同时取消下一次状态查询。
|
||||||
function Qt() {
|
function Qt() {
|
||||||
((Y.value = !1), Nt(), (Z.value = !1), (X.value = ``));
|
((Y.value = !1), Nt(), (Z.value = !1), (X.value = ``));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 个人实名认证路由适配层:复用统一实名认证页,以 person 作为初始认证类型,不单独维护一套提交逻辑。
|
||||||
|
*/
|
||||||
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
import "~/assets/styles/UploadField.BbTCTv6C.css";
|
||||||
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
import "~/assets/styles/PageSteps.B5K7G9zF.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 账单详情兼容路由:复用订单详情页面;以 fullPath 为组件键,保证切换账单参数时重新建立详情状态。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/_id_.gjoJy9S8.css";
|
import "~/assets/styles/_id_.gjoJy9S8.css";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 旧账单列表入口:保留原查询参数与 hash,重定向到 /finance?tab=bills;本页不维护第二份账单列表。
|
||||||
|
*/
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
redirect: {
|
redirect: {
|
||||||
redirect: (e) => ({
|
redirect: (e) => ({
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 购物车:读取服务端购物车、逐项重新报价、保留选择并结算。修改使用 revision 或 expected_cart 进行并发校验,不能把列表下标当作永久商品标识。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/cart.CSS2vTmS.css";
|
import "~/assets/styles/cart.CSS2vTmS.css";
|
||||||
import { toDisplayString } from "vue";
|
import { toDisplayString } from "vue";
|
||||||
@@ -40,15 +43,18 @@ import { t as purchase_limit_state_t } from "~/lib/purchase-limit-state.js";
|
|||||||
import { a as cart_edit_a } from "~/lib/cart-edit.js";
|
import { a as cart_edit_a } from "~/lib/cart-edit.js";
|
||||||
import { i as cart_edit_i } from "~/lib/cart-edit.js";
|
import { i as cart_edit_i } from "~/lib/cart-edit.js";
|
||||||
import { t as cart_edit_t } from "~/lib/cart-edit.js";
|
import { t as cart_edit_t } from "~/lib/cart-edit.js";
|
||||||
|
// 只接受普通对象形状的数据,供配置摘要解析使用。
|
||||||
function E(e) {
|
function E(e) {
|
||||||
return typeof e == `object` && e && !Array.isArray(e) ? e : void 0;
|
return typeof e == `object` && e && !Array.isArray(e) ? e : void 0;
|
||||||
}
|
}
|
||||||
|
// 将可展示的配置值限制为文本;疑似 HTML 或编码标签不作为摘要内容。
|
||||||
function D(e) {
|
function D(e) {
|
||||||
if (typeof e != `string` && (typeof e != `number` || !Number.isFinite(e)))
|
if (typeof e != `string` && (typeof e != `number` || !Number.isFinite(e)))
|
||||||
return ``;
|
return ``;
|
||||||
let t = String(e).trim();
|
let t = String(e).trim();
|
||||||
return /<\/?[a-z!]|&(?:amp;)*(?:lt|gt|quot|#0*60|#x0*3c);/i.test(t) ? `` : t;
|
return /<\/?[a-z!]|&(?:amp;)*(?:lt|gt|quot|#0*60|#x0*3c);/i.test(t) ? `` : t;
|
||||||
}
|
}
|
||||||
|
// 仅在数值格式与单位明确时生成 CPU/内存/带宽等展示值。
|
||||||
function O(e, t) {
|
function O(e, t) {
|
||||||
let n = D(e);
|
let n = D(e);
|
||||||
return n
|
return n
|
||||||
@@ -73,10 +79,12 @@ var k = {
|
|||||||
day: `天`,
|
day: `天`,
|
||||||
daily: `天`,
|
daily: `天`,
|
||||||
};
|
};
|
||||||
|
// 将计费周期转换为可读名称,未识别的机器枚举不直接展示。
|
||||||
function A(e) {
|
function A(e) {
|
||||||
let t = D(e);
|
let t = D(e);
|
||||||
return k[t.toLowerCase()] ?? (/^(?:[a-z_]+|\d+)$/i.test(t) ? `` : t);
|
return k[t.toLowerCase()] ?? (/^(?:[a-z_]+|\d+)$/i.test(t) ? `` : t);
|
||||||
}
|
}
|
||||||
|
// 归一化不同模块的配置标签,用于摘要去重和识别 CPU、内存、周期、镜像等字段。
|
||||||
function j(e, t = ``) {
|
function j(e, t = ``) {
|
||||||
return /^(?:cpu|cpu_num)$/i.test(t) ||
|
return /^(?:cpu|cpu_num)$/i.test(t) ||
|
||||||
/^(?:cpu|CPU核数|处理器|核数)$/i.test(e)
|
/^(?:cpu|CPU核数|处理器|核数)$/i.test(e)
|
||||||
@@ -93,6 +101,7 @@ function j(e, t = ``) {
|
|||||||
? `os`
|
? `os`
|
||||||
: e;
|
: e;
|
||||||
}
|
}
|
||||||
|
// 摘要排除密码、令牌、私钥及内部 ID 等字段;不能直接遍历配置对象展示所有内容。
|
||||||
function M(e, t = ``) {
|
function M(e, t = ``) {
|
||||||
return (
|
return (
|
||||||
/(?:password|passwd|secret|token|private.?key|ssh.?key|credential|description|密码|口令|密钥|令牌|产品介绍|商品介绍|产品描述|商品描述)/i.test(
|
/(?:password|passwd|secret|token|private.?key|ssh.?key|credential|description|密码|口令|密钥|令牌|产品介绍|商品介绍|产品描述|商品描述)/i.test(
|
||||||
@@ -102,6 +111,7 @@ function M(e, t = ``) {
|
|||||||
/(?:^|\s)id$/i.test(e)
|
/(?:^|\s)id$/i.test(e)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 当报价接口未提供 preview 时,从已知配置字段整理摘要。
|
||||||
function N(e, t) {
|
function N(e, t) {
|
||||||
let n = [],
|
let n = [],
|
||||||
r = (e, t) => {
|
r = (e, t) => {
|
||||||
@@ -134,6 +144,7 @@ function N(e, t) {
|
|||||||
n
|
n
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 优先使用报价 preview,过滤敏感项并合并 CPU/内存/套餐等重复信息;缺失时才使用已知配置字段。
|
||||||
function pe(e, t) {
|
function pe(e, t) {
|
||||||
let n = E(e.config_options) ?? {},
|
let n = E(e.config_options) ?? {},
|
||||||
r =
|
r =
|
||||||
@@ -391,6 +402,7 @@ var me = {
|
|||||||
e.customfield,
|
e.customfield,
|
||||||
e.self_defined_field,
|
e.self_defined_field,
|
||||||
]);
|
]);
|
||||||
|
// 按商品配置签名及同签名出现次数记录选择,列表重排时不误选另一件同款商品。
|
||||||
function We() {
|
function We() {
|
||||||
let e = new Map();
|
let e = new Map();
|
||||||
return D.value
|
return D.value
|
||||||
@@ -401,6 +413,7 @@ var me = {
|
|||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
}
|
}
|
||||||
|
// 根据重新加载后的列表重建选择下标,避免沿用过期的位置。
|
||||||
function Ge(e) {
|
function Ge(e) {
|
||||||
let t = new Map();
|
let t = new Map();
|
||||||
A.value = D.value.flatMap((n, r) => {
|
A.value = D.value.flatMap((n, r) => {
|
||||||
@@ -409,6 +422,7 @@ var me = {
|
|||||||
return (t.set(i, a + 1), e.includes(`${i}:${a}`) ? [r] : []);
|
return (t.set(i, a + 1), e.includes(`${i}:${a}`) ? [r] : []);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 金额必须是非空且有限的非负数字;未返回报价不能当作零元。
|
||||||
function Ke(e) {
|
function Ke(e) {
|
||||||
return (
|
return (
|
||||||
e != null &&
|
e != null &&
|
||||||
@@ -417,6 +431,7 @@ var me = {
|
|||||||
Number(e) >= 0
|
Number(e) >= 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 逐项请求最新报价;同时核对购物车代次、列表快照和单项请求序号,旧响应不覆盖新配置。
|
||||||
async function qe(e = D.value.map((e, t) => t)) {
|
async function qe(e = D.value.map((e, t) => t)) {
|
||||||
let t = U,
|
let t = U,
|
||||||
n = q();
|
n = q();
|
||||||
@@ -481,6 +496,7 @@ var me = {
|
|||||||
X.value !== null &&
|
X.value !== null &&
|
||||||
(!w.value || (C.checked.value && C.allowed.value)),
|
(!w.value || (C.checked.value && C.allowed.value)),
|
||||||
);
|
);
|
||||||
|
// 结算限购预检针对当前选择的位置;没有选择或仍在加载时清除旧预检。
|
||||||
function Ze() {
|
function Ze() {
|
||||||
if (!w.value || k.value || !A.value.length) {
|
if (!w.value || k.value || !A.value.length) {
|
||||||
C.reset();
|
C.reset();
|
||||||
@@ -491,6 +507,7 @@ var me = {
|
|||||||
positions: [...A.value],
|
positions: [...A.value],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 刷新购物车时先废弃旧报价,再按配置签名恢复摘要与选择,最后重新报价。
|
||||||
async function Z(e = !1) {
|
async function Z(e = !1) {
|
||||||
let t = ++W,
|
let t = ++W,
|
||||||
n = e ? We() : [],
|
n = e ? We() : [],
|
||||||
@@ -546,6 +563,7 @@ var me = {
|
|||||||
let t = A.value.indexOf(e);
|
let t = A.value.indexOf(e);
|
||||||
t === -1 ? A.value.push(e) : A.value.splice(t, 1);
|
t === -1 ? A.value.push(e) : A.value.splice(t, 1);
|
||||||
}
|
}
|
||||||
|
// 遇到 409 并发冲突时重载购物车并清空选择,要求用户重新确认,避免误改已移动的下标。
|
||||||
async function Q(e, t) {
|
async function Q(e, t) {
|
||||||
let n = e instanceof Error ? e.message : t;
|
let n = e instanceof Error ? e.message : t;
|
||||||
e && typeof e == `object` && `status` in e && e.status === 409
|
e && typeof e == `object` && `status` in e && e.status === 409
|
||||||
@@ -556,6 +574,7 @@ var me = {
|
|||||||
(M.value = N.value ? `${n};${M.value}` : n))
|
(M.value = N.value ? `${n};${M.value}` : n))
|
||||||
: (M.value = n);
|
: (M.value = n);
|
||||||
}
|
}
|
||||||
|
// 先保存购物车编辑上下文,再进入对应商品页;商品页会再次确认该位置仍匹配商品。
|
||||||
async function et(e) {
|
async function et(e) {
|
||||||
if (!j.value && D.value[e]) {
|
if (!j.value && D.value[e]) {
|
||||||
j.value = !0;
|
j.value = !0;
|
||||||
@@ -574,6 +593,7 @@ var me = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 修改数量必须为正整数,并携带当前购物车并发校验信息。
|
||||||
async function tt(e, t) {
|
async function tt(e, t) {
|
||||||
if (!(j.value || !Number.isInteger(t) || t < 1 || !D.value[e])) {
|
if (!(j.value || !Number.isInteger(t) || t < 1 || !D.value[e])) {
|
||||||
((j.value = !0), (M.value = ``));
|
((j.value = !0), (M.value = ``));
|
||||||
@@ -591,6 +611,7 @@ var me = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
let $ = ref(null);
|
let $ = ref(null);
|
||||||
|
// 确认删除前记录位置与整个购物车签名,等待确认期间列表变化则不得继续使用旧位置。
|
||||||
function nt(e) {
|
function nt(e) {
|
||||||
let t = D.value[e];
|
let t = D.value[e];
|
||||||
!j.value &&
|
!j.value &&
|
||||||
@@ -602,6 +623,7 @@ var me = {
|
|||||||
label: `删除“${product_name_n(t.name)}”`,
|
label: `删除“${product_name_n(t.name)}”`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 清空操作记录当时的全部位置与签名,最终仍由统一确认函数校验。
|
||||||
function rt() {
|
function rt() {
|
||||||
!j.value &&
|
!j.value &&
|
||||||
D.value.length &&
|
D.value.length &&
|
||||||
@@ -612,6 +634,7 @@ var me = {
|
|||||||
label: `清空购物车`,
|
label: `清空购物车`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 批量删除仅暂存当前选中位置,不立即发送删除请求。
|
||||||
function it() {
|
function it() {
|
||||||
!j.value &&
|
!j.value &&
|
||||||
A.value.length &&
|
A.value.length &&
|
||||||
@@ -622,6 +645,7 @@ var me = {
|
|||||||
label: `删除选中的 ${A.value.length} 项商品`,
|
label: `删除选中的 ${A.value.length} 项商品`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 确认时再核对购物车签名;单项、批量、清空分别调用对应接口并携带并发校验。
|
||||||
async function at() {
|
async function at() {
|
||||||
let e = $.value;
|
let e = $.value;
|
||||||
if (e && !j.value) {
|
if (e && !j.value) {
|
||||||
@@ -650,6 +674,7 @@ var me = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 结算要求选择项报价均已确认;服务端返回订单后打开支付并刷新购物车。
|
||||||
async function ot() {
|
async function ot() {
|
||||||
if (!(j.value || P.value)) {
|
if (!(j.value || P.value)) {
|
||||||
if (((M.value = ``), !A.value.length)) {
|
if (((M.value = ``), !A.value.length)) {
|
||||||
@@ -685,6 +710,7 @@ var me = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 支付完成后进入订单列表,订单与支付状态仍以服务端为准。
|
||||||
function st() {
|
function st() {
|
||||||
E.push(`/orders`);
|
E.push(`/orders`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 云服务器列表入口:校验动态菜单参数 m 为正的安全整数,然后把云服务器模块组与菜单 ID 交给 HostList。错误参数显示提示,不静默展示其他分组。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/OsIcon.CAi4Iz2S.css";
|
import "~/assets/styles/OsIcon.CAi4Iz2S.css";
|
||||||
import "~/assets/styles/HostList.B3U15sJm.css";
|
import "~/assets/styles/HostList.B3U15sJm.css";
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 物理服务器列表入口:复用 HostList 的物理服务器模块组;动态菜单 m 必须通过正整数校验,组件 key 随菜单变化以重置列表状态。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/OsIcon.CAi4Iz2S.css";
|
import "~/assets/styles/OsIcon.CAi4Iz2S.css";
|
||||||
import "~/assets/styles/HostList.B3U15sJm.css";
|
import "~/assets/styles/HostList.B3U15sJm.css";
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 财务中心:账单、交易、余额、提现与冻结记录分开加载;钱包入口为本页别名,充值/提现能力由站点配置决定。
|
||||||
|
*/
|
||||||
import "~/assets/styles/orders.BflDlvVz.css";
|
import "~/assets/styles/orders.BflDlvVz.css";
|
||||||
import "~/assets/styles/WithdrawDialog.ks0wdKEK.css";
|
import "~/assets/styles/WithdrawDialog.ks0wdKEK.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
@@ -147,6 +150,7 @@ var je = {
|
|||||||
et = ref(!1),
|
et = ref(!1),
|
||||||
M = ref(null),
|
M = ref(null),
|
||||||
N = ref(``);
|
N = ref(``);
|
||||||
|
// 账户总览变化时同步余额提醒设置,仅回填本地草稿。
|
||||||
function tt() {
|
function tt() {
|
||||||
let e = S.overview;
|
let e = S.overview;
|
||||||
e &&
|
e &&
|
||||||
@@ -156,6 +160,7 @@ var je = {
|
|||||||
watch(() => S.overview, tt, {
|
watch(() => S.overview, tt, {
|
||||||
immediate: !0,
|
immediate: !0,
|
||||||
});
|
});
|
||||||
|
// 开启余额提醒必须填写正的有限阈值;关闭时发送零阈值,成功后同步账户总览。
|
||||||
async function nt() {
|
async function nt() {
|
||||||
((j.value = ``), (et.value = !1));
|
((j.value = ``), (et.value = !1));
|
||||||
let e = Number(k.value ?? 0);
|
let e = Number(k.value ?? 0);
|
||||||
@@ -182,6 +187,7 @@ var je = {
|
|||||||
A.value = !1;
|
A.value = !1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 读取待审核退款总额;接口未开放的 403/404 不作为普通页面错误展示。
|
||||||
async function rt() {
|
async function rt() {
|
||||||
N.value = ``;
|
N.value = ``;
|
||||||
try {
|
try {
|
||||||
@@ -200,6 +206,7 @@ var je = {
|
|||||||
: `待审核退款金额加载失败`;
|
: `待审核退款金额加载失败`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 只允许已知财务标签值,其他查询参数回落到账单。
|
||||||
function P(e) {
|
function P(e) {
|
||||||
return typeof e == `string` &&
|
return typeof e == `string` &&
|
||||||
[`bills`, `transaction`, `credit`, `withdraw`, `freeze`].includes(e)
|
[`bills`, `transaction`, `credit`, `withdraw`, `freeze`].includes(e)
|
||||||
@@ -207,6 +214,7 @@ var je = {
|
|||||||
: `bills`;
|
: `bills`;
|
||||||
}
|
}
|
||||||
let F = ref(P(x.query.tab));
|
let F = ref(P(x.query.tab));
|
||||||
|
// 切换标签时更新 URL 并保留其他查询参数,使刷新后仍能恢复位置。
|
||||||
function it(e) {
|
function it(e) {
|
||||||
return navigateTo(
|
return navigateTo(
|
||||||
{
|
{
|
||||||
@@ -278,6 +286,7 @@ var je = {
|
|||||||
value: `Artificial`,
|
value: `Artificial`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
// 搜索词在提交后才应用;按当前标签重置对应页码并加载。
|
||||||
function V() {
|
function V() {
|
||||||
((B.value = z.value.trim()),
|
((B.value = z.value.trim()),
|
||||||
F.value === `transaction`
|
F.value === `transaction`
|
||||||
@@ -306,6 +315,7 @@ var je = {
|
|||||||
G = ref(``),
|
G = ref(``),
|
||||||
K = ref(`0.00`),
|
K = ref(`0.00`),
|
||||||
q = 0;
|
q = 0;
|
||||||
|
// 交易流水使用独立请求序号,快速筛选时忽略更早的结果。
|
||||||
async function J() {
|
async function J() {
|
||||||
let e = ++q;
|
let e = ++q;
|
||||||
((ut.value = !0), (U.value = ``));
|
((ut.value = !0), (U.value = ``));
|
||||||
@@ -328,6 +338,7 @@ var je = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
let Y = 0;
|
let Y = 0;
|
||||||
|
// 余额流水与累计金额同步更新;失败时不保留旧金额冒充新结果。
|
||||||
async function X() {
|
async function X() {
|
||||||
let e = ++Y;
|
let e = ++Y;
|
||||||
((pt.value = !0), (G.value = ``));
|
((pt.value = !0), (G.value = ``));
|
||||||
@@ -358,6 +369,7 @@ var je = {
|
|||||||
function ht(e) {
|
function ht(e) {
|
||||||
((W.value = e.page + 1), (T.value = e.rows), X());
|
((W.value = e.page + 1), (T.value = e.rows), X());
|
||||||
}
|
}
|
||||||
|
// 充值完成后刷新账户余额与相关流水,不在本地直接累加金额。
|
||||||
function gt() {
|
function gt() {
|
||||||
(S.refreshOverview(), X(), J());
|
(S.refreshOverview(), X(), J());
|
||||||
}
|
}
|
||||||
@@ -397,6 +409,7 @@ var je = {
|
|||||||
: Z.value;
|
: Z.value;
|
||||||
}),
|
}),
|
||||||
Ct = 0;
|
Ct = 0;
|
||||||
|
// 按服务端状态分页查询提现记录;本地关键词筛选仅作用于当前返回页。
|
||||||
async function Q() {
|
async function Q() {
|
||||||
let e = ++Ct;
|
let e = ++Ct;
|
||||||
((bt.value = !0), (xt.value = ``));
|
((bt.value = !0), (xt.value = ``));
|
||||||
@@ -420,6 +433,7 @@ var je = {
|
|||||||
function wt(e) {
|
function wt(e) {
|
||||||
((yt.value = e.page + 1), (T.value = e.rows), Q());
|
((yt.value = e.page + 1), (T.value = e.rows), Q());
|
||||||
}
|
}
|
||||||
|
// 提现完成后刷新账户总览、提现列表及余额明细。
|
||||||
function Tt() {
|
function Tt() {
|
||||||
(S.refreshOverview(), Q(), X());
|
(S.refreshOverview(), Q(), X());
|
||||||
}
|
}
|
||||||
@@ -428,6 +442,7 @@ var je = {
|
|||||||
Ot = ref(1),
|
Ot = ref(1),
|
||||||
kt = ref(!1),
|
kt = ref(!1),
|
||||||
$ = ref(``);
|
$ = ref(``);
|
||||||
|
// 冻结余额独立分页读取;异常时清空旧列表并显示错误。
|
||||||
async function At() {
|
async function At() {
|
||||||
((kt.value = !0), ($.value = ``));
|
((kt.value = !0), ($.value = ``));
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 密码找回:手机或邮箱验证码配合验证码挑战提交重置请求,成功后返回登录并保留经处理的站内跳转参数。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PhoneCodeField.CwyHXfML.css";
|
import "~/assets/styles/PhoneCodeField.CwyHXfML.css";
|
||||||
import "~/assets/styles/GeetestField.DiieTibK.css";
|
import "~/assets/styles/GeetestField.DiieTibK.css";
|
||||||
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
|
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
|
||||||
@@ -119,6 +122,7 @@ var D = {
|
|||||||
error: W,
|
error: W,
|
||||||
phoneCode: () => U.phone_code,
|
phoneCode: () => U.phone_code,
|
||||||
});
|
});
|
||||||
|
// 复用 password_reset 场景的验证码发送与倒计时,不在页面另写一套短信请求。
|
||||||
function fe() {
|
function fe() {
|
||||||
if (G.value) return;
|
if (G.value) return;
|
||||||
let e = U.account.trim();
|
let e = U.account.trim();
|
||||||
@@ -128,6 +132,7 @@ var D = {
|
|||||||
H.value === `email` ? `请输入邮箱` : `请输入手机号`,
|
H.value === `email` ? `请输入邮箱` : `请输入手机号`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 校验账号、区号、验证码和两次密码后提交重置;失败交由验证码实例处理挑战刷新。
|
||||||
async function pe() {
|
async function pe() {
|
||||||
if (G.value || Q.value) return;
|
if (G.value || Q.value) return;
|
||||||
W.value = ``;
|
W.value = ``;
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 帮助中心:支持独立文章路由和资源中心嵌入模式;目录与文章分别加载,通过请求序号防止快速切换文章时出现旧正文。
|
||||||
|
*/
|
||||||
import "~/assets/styles/help.BSOB30LE.css";
|
import "~/assets/styles/help.BSOB30LE.css";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
scrollToTop: !0,
|
scrollToTop: !0,
|
||||||
@@ -157,11 +160,13 @@ var me = {
|
|||||||
L.value.find((e) => e.helps?.some((e) => e.id === q.value))
|
L.value.find((e) => e.helps?.some((e) => e.id === q.value))
|
||||||
?.name ?? ``,
|
?.name ?? ``,
|
||||||
);
|
);
|
||||||
|
// 嵌入模式使用资源中心地址,独立模式使用帮助文章地址,链接统一保留文章 ID。
|
||||||
function Ce(e) {
|
function Ce(e) {
|
||||||
return x?.embedded
|
return x?.embedded
|
||||||
? `/resources?section=help&id=${e}`
|
? `/resources?section=help&id=${e}`
|
||||||
: `/help/article?id=${e}`;
|
: `/help/article?id=${e}`;
|
||||||
}
|
}
|
||||||
|
// 从路由校验文章 ID;未明确指定文章时选择目录首篇,无效编号不继续请求详情。
|
||||||
async function Z() {
|
async function Z() {
|
||||||
if (X) return;
|
if (X) return;
|
||||||
let e = F.query.id !== void 0 || F.path === `/help/article`,
|
let e = F.query.id !== void 0 || F.path === `/help/article`,
|
||||||
@@ -183,6 +188,7 @@ var me = {
|
|||||||
(K.value = !1),
|
(K.value = !1),
|
||||||
(z.value = ``));
|
(z.value = ``));
|
||||||
}
|
}
|
||||||
|
// 加载帮助目录后再解析当前文章;目录请求代次与文章请求代次互相独立。
|
||||||
async function Q() {
|
async function Q() {
|
||||||
let e = ++Y;
|
let e = ++Y;
|
||||||
((R.value = !0), (B.value = ``));
|
((R.value = !0), (B.value = ``));
|
||||||
@@ -198,6 +204,7 @@ var me = {
|
|||||||
}
|
}
|
||||||
!X && e === Y && (await Z());
|
!X && e === Y && (await Z());
|
||||||
}
|
}
|
||||||
|
// 每次切换文章先清除旧正文,再读取详情;仅当前请求且页面仍存活时更新状态。
|
||||||
async function $(e) {
|
async function $(e) {
|
||||||
let t = ++J;
|
let t = ++J;
|
||||||
((q.value = e), (K.value = !0), (W.value = null), (z.value = ``));
|
((q.value = e), (K.value = !0), (W.value = null), (z.value = ``));
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 会员中心首页:账户总览、登录提示及各业务概览面板的组合入口;问候语随本地时间更新,实名状态单独读取。
|
||||||
|
*/
|
||||||
import "~/assets/styles/WithdrawDialog.ks0wdKEK.css";
|
import "~/assets/styles/WithdrawDialog.ks0wdKEK.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/RechargeDialog.DpsMly4r.css";
|
import "~/assets/styles/RechargeDialog.DpsMly4r.css";
|
||||||
@@ -43,6 +46,7 @@ import HomeReferralPanel from "~/components/home/HomeReferralPanel.vue";
|
|||||||
import HomeServerPanel from "~/components/home/HomeServerPanel.vue";
|
import HomeServerPanel from "~/components/home/HomeServerPanel.vue";
|
||||||
import HomeTicketPanel from "~/components/home/HomeTicketPanel.vue";
|
import HomeTicketPanel from "~/components/home/HomeTicketPanel.vue";
|
||||||
import HomeWalletCard from "~/components/home/HomeWalletCard.vue";
|
import HomeWalletCard from "~/components/home/HomeWalletCard.vue";
|
||||||
|
// 按本地时段选择问候语,不影响服务端账户或计费时间。
|
||||||
function S(e) {
|
function S(e) {
|
||||||
let t = e.getHours();
|
let t = e.getHours();
|
||||||
return t < 5 || t >= 22
|
return t < 5 || t >= 22
|
||||||
@@ -75,6 +79,7 @@ function S(e) {
|
|||||||
icon: `lucide:sunset`,
|
icon: `lucide:sunset`,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
// 把上次登录的秒级时间戳转换为可读时间;缺失或无效时展示无历史记录。
|
||||||
function C(e) {
|
function C(e) {
|
||||||
let t = e?.previous_login,
|
let t = e?.previous_login,
|
||||||
n = Number(t?.time),
|
n = Number(t?.time),
|
||||||
@@ -175,9 +180,11 @@ var w = {
|
|||||||
K = computed(() => S(G.value)),
|
K = computed(() => S(G.value)),
|
||||||
q = computed(() => C(b.overview)),
|
q = computed(() => C(b.overview)),
|
||||||
J;
|
J;
|
||||||
|
// 更新问候语使用的时间;定时与页面可见性事件共用此入口。
|
||||||
function Y() {
|
function Y() {
|
||||||
G.value = new Date();
|
G.value = new Date();
|
||||||
}
|
}
|
||||||
|
// 复制账户 ID;剪贴板失败时只复位反馈,不影响账户数据。
|
||||||
async function me() {
|
async function me() {
|
||||||
if (b.overview)
|
if (b.overview)
|
||||||
try {
|
try {
|
||||||
@@ -190,6 +197,7 @@ var w = {
|
|||||||
let X = ref(null),
|
let X = ref(null),
|
||||||
Z = ref(!0),
|
Z = ref(!0),
|
||||||
Q = ref(``);
|
Q = ref(``);
|
||||||
|
// 刷新账户总览;会话失效由鉴权层处理,其他失败在首页单独提示。
|
||||||
function $() {
|
function $() {
|
||||||
((Q.value = ``),
|
((Q.value = ``),
|
||||||
b.fetchOverview().catch((e) => {
|
b.fetchOverview().catch((e) => {
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 发票列表与申请入口共用页面:加载可开票订单、抬头、收票地址、项目及税费配置;报价必须匹配当前表单签名后才可提交。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PageInfoNotice._16xRFrB.css";
|
import "~/assets/styles/PageInfoNotice._16xRFrB.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/invoices.t1P1GXOx.css";
|
import "~/assets/styles/invoices.t1P1GXOx.css";
|
||||||
@@ -397,6 +400,7 @@ var Ce = {
|
|||||||
tax: V.tax_rate,
|
tax: V.tax_rate,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
// 打开申请时重置上次草稿,并完整加载所有分页选项;默认值确定后再请求报价。
|
||||||
async function J() {
|
async function J() {
|
||||||
if (!(D.value || E.value)) {
|
if (!(D.value || E.value)) {
|
||||||
((T.value = !0),
|
((T.value = !0),
|
||||||
@@ -521,6 +525,7 @@ var Ce = {
|
|||||||
: `请选择当前抬头支持的开票项目`
|
: `请选择当前抬头支持的开票项目`
|
||||||
: `请选择有效的发票抬头`;
|
: `请选择有效的发票抬头`;
|
||||||
});
|
});
|
||||||
|
// 报价以排序后的订单 ID 和全部开票选项作为签名;更早响应或表单已变更的结果不得用于提交。
|
||||||
async function Q() {
|
async function Q() {
|
||||||
let e = ++P.value;
|
let e = ++P.value;
|
||||||
if (
|
if (
|
||||||
@@ -578,6 +583,7 @@ var Ce = {
|
|||||||
.reduce((e, t) => e + Number(t.amount || 0), 0)
|
.reduce((e, t) => e + Number(t.amount || 0), 0)
|
||||||
.toFixed(2);
|
.toFixed(2);
|
||||||
});
|
});
|
||||||
|
// 重新校验订单有效性、抬头、收票方式及最新报价后申请;返回费用订单时转入支付,不直接认定发票已开具。
|
||||||
async function Et() {
|
async function Et() {
|
||||||
if (E.value || D.value || !O.value) return;
|
if (E.value || D.value || !O.value) return;
|
||||||
if (((k.value = ``), Z.value)) {
|
if (((k.value = ``), Z.value)) {
|
||||||
@@ -633,12 +639,14 @@ var Ce = {
|
|||||||
E.value = !1;
|
E.value = !1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 只接受正整数形式的费用订单 ID,防止无效跳转或支付目标。
|
||||||
function Dt(e) {
|
function Dt(e) {
|
||||||
return (
|
return (
|
||||||
(typeof e == `string` || typeof e == `number`) &&
|
(typeof e == `string` || typeof e == `number`) &&
|
||||||
/^[1-9]\d*$/.test(String(e))
|
/^[1-9]\d*$/.test(String(e))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 只有具有有效费用订单且处于可继续处理的支付状态,才展示对应入口。
|
||||||
function Ot(e) {
|
function Ot(e) {
|
||||||
return (
|
return (
|
||||||
Dt(e.invoice_order_id) &&
|
Dt(e.invoice_order_id) &&
|
||||||
@@ -647,6 +655,7 @@ var Ce = {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// 未付款的发票费用订单打开支付,其余待审核凭证状态交给订单详情处理。
|
||||||
function kt(e) {
|
function kt(e) {
|
||||||
if (Ot(e)) {
|
if (Ot(e)) {
|
||||||
if (e.order_status !== `Unpaid`) {
|
if (e.order_status !== `Unpaid`) {
|
||||||
@@ -656,9 +665,11 @@ var Ce = {
|
|||||||
((vt.value = e.invoice_order_id), (F.value = !0));
|
((vt.value = e.invoice_order_id), (F.value = !0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 支付结束后退出申请专用路由或刷新列表,开票状态以服务端为准。
|
||||||
function At() {
|
function At() {
|
||||||
((F.value = !1), S.value ? x.push(`/invoices`) : w());
|
((F.value = !1), S.value ? x.push(`/invoices`) : w());
|
||||||
}
|
}
|
||||||
|
// 申请弹窗关闭且没有有效草稿时,申请专用路由回到发票列表。
|
||||||
function jt(e) {
|
function jt(e) {
|
||||||
!e && S.value && !O.value && x.push(`/invoices`);
|
!e && S.value && !O.value && x.push(`/invoices`);
|
||||||
}
|
}
|
||||||
@@ -670,9 +681,11 @@ var Ce = {
|
|||||||
`wait_create`,
|
`wait_create`,
|
||||||
`create_fail`,
|
`create_fail`,
|
||||||
]);
|
]);
|
||||||
|
// 可删除状态集中列举,已开具、已寄出等终态不开放撤回。
|
||||||
function Nt(e) {
|
function Nt(e) {
|
||||||
return Mt.has(String(e.status || ``).toLowerCase());
|
return Mt.has(String(e.status || ``).toLowerCase());
|
||||||
}
|
}
|
||||||
|
// 撤回需要状态允许且用户确认;删除后重新读取列表。
|
||||||
async function Pt(e) {
|
async function Pt(e) {
|
||||||
if (
|
if (
|
||||||
Nt(e) &&
|
Nt(e) &&
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 发票详情:按查询 ID 加载发票,区分历史登记与正式电子文件;下载链接必须通过协议与字符校验。
|
||||||
|
*/
|
||||||
import "~/assets/styles/invoice.B6sYFYlb.css";
|
import "~/assets/styles/invoice.B6sYFYlb.css";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
key: (e) => e.fullPath,
|
key: (e) => e.fullPath,
|
||||||
@@ -104,6 +107,7 @@ var T = {
|
|||||||
: W[String(z.value?.status || ``).toLowerCase()] ||
|
: W[String(z.value?.status || ``).toLowerCase()] ||
|
||||||
String(z.value?.status || `—`),
|
String(z.value?.status || `—`),
|
||||||
);
|
);
|
||||||
|
// 下载地址仅允许 HTTP(S) 或站内绝对路径,拒绝反斜杠、空白控制字符和协议相对地址。
|
||||||
function q(e) {
|
function q(e) {
|
||||||
return typeof e != `string` || /[\u0000-\u0020\\]/.test(e)
|
return typeof e != `string` || /[\u0000-\u0020\\]/.test(e)
|
||||||
? ``
|
? ``
|
||||||
@@ -111,6 +115,7 @@ var T = {
|
|||||||
? e
|
? e
|
||||||
: ``;
|
: ``;
|
||||||
}
|
}
|
||||||
|
// 从详情的候选字段中选择第一个非空值,用于兼容不同发票字段展示。
|
||||||
function J(...e) {
|
function J(...e) {
|
||||||
for (let t of e) {
|
for (let t of e) {
|
||||||
let e = z.value?.[t];
|
let e = z.value?.[t];
|
||||||
@@ -118,6 +123,7 @@ var T = {
|
|||||||
}
|
}
|
||||||
return ``;
|
return ``;
|
||||||
}
|
}
|
||||||
|
// 普通发票尚无有效下载地址时单独请求文件地址;历史已开票登记不伪造下载文件。
|
||||||
async function Y(e) {
|
async function Y(e) {
|
||||||
if (!(G.value || q(z.value?.invoice_url))) {
|
if (!(G.value || q(z.value?.invoice_url))) {
|
||||||
((H.value = !0), (U.value = ``));
|
((H.value = !0), (U.value = ``));
|
||||||
@@ -138,6 +144,7 @@ var T = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 校验查询 ID 并确认响应含发票资料,再按需要获取正式文件地址。
|
||||||
async function X() {
|
async function X() {
|
||||||
((B.value = !0), (V.value = ``));
|
((B.value = !0), (V.value = ``));
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 发票申请路由适配层:复用发票列表页,具体申请专用交互由该页根据当前路由决定。
|
||||||
|
*/
|
||||||
import "~/assets/styles/PageInfoNotice._16xRFrB.css";
|
import "~/assets/styles/PageInfoNotice._16xRFrB.css";
|
||||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||||
import "~/assets/styles/invoices.t1P1GXOx.css";
|
import "~/assets/styles/invoices.t1P1GXOx.css";
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 发票资料设置:统一维护抬头与收票地址;编辑器复制原数据,提交按新增/修改及电子/纸质地址分别组装字段。
|
||||||
|
*/
|
||||||
import "~/assets/styles/settings.zV3AWuRw.css";
|
import "~/assets/styles/settings.zV3AWuRw.css";
|
||||||
import { toDisplayString } from "vue";
|
import { toDisplayString } from "vue";
|
||||||
import { onMounted } from "vue";
|
import { onMounted } from "vue";
|
||||||
@@ -145,6 +148,7 @@ var ue = {
|
|||||||
M = ref([]),
|
M = ref([]),
|
||||||
N = ref(!0),
|
N = ref(!0),
|
||||||
P = ref(``);
|
P = ref(``);
|
||||||
|
// 完整读取抬头与地址的所有分页,避免选择器仅显示第一页资料。
|
||||||
async function F() {
|
async function F() {
|
||||||
((N.value = !0), (P.value = ``));
|
((N.value = !0), (P.value = ``));
|
||||||
try {
|
try {
|
||||||
@@ -182,6 +186,7 @@ var ue = {
|
|||||||
bank: ``,
|
bank: ``,
|
||||||
bank_user: ``,
|
bank_user: ``,
|
||||||
});
|
});
|
||||||
|
// 重置抬头草稿后回填待编辑记录,避免上次表单字段残留。
|
||||||
function V(e) {
|
function V(e) {
|
||||||
((L.value = e?.id ?? null),
|
((L.value = e?.id ?? null),
|
||||||
(z.value = ``),
|
(z.value = ``),
|
||||||
@@ -205,6 +210,7 @@ var ue = {
|
|||||||
}),
|
}),
|
||||||
(I.value = !0));
|
(I.value = !0));
|
||||||
}
|
}
|
||||||
|
// 抬头名称必填;新增与修改成功后统一重新加载资料列表。
|
||||||
async function We() {
|
async function We() {
|
||||||
if (!R.value) {
|
if (!R.value) {
|
||||||
if (((z.value = ``), !B.title.trim())) {
|
if (((z.value = ``), !B.title.trim())) {
|
||||||
@@ -230,6 +236,7 @@ var ue = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 删除抬头后重载列表,失败在页面保留错误提示。
|
||||||
async function H(e) {
|
async function H(e) {
|
||||||
try {
|
try {
|
||||||
(await v.del(`/invoice_title/${e.id}`), await F());
|
(await v.del(`/invoice_title/${e.id}`), await F());
|
||||||
@@ -249,6 +256,7 @@ var ue = {
|
|||||||
phone: ``,
|
phone: ``,
|
||||||
is_default: !1,
|
is_default: !1,
|
||||||
});
|
});
|
||||||
|
// 电子邮箱和纸质地址共用编辑器;打开时恢复默认字段,再复制现有资料。
|
||||||
function J(e) {
|
function J(e) {
|
||||||
((W.value = e?.id ?? null),
|
((W.value = e?.id ?? null),
|
||||||
(K.value = ``),
|
(K.value = ``),
|
||||||
@@ -271,6 +279,7 @@ var ue = {
|
|||||||
}),
|
}),
|
||||||
(U.value = !0));
|
(U.value = !0));
|
||||||
}
|
}
|
||||||
|
// 电子地址只提交邮箱,纸质地址提交收件地址与电话,避免把另一种地址的草稿字段发给接口。
|
||||||
async function Ge() {
|
async function Ge() {
|
||||||
if (!G.value) {
|
if (!G.value) {
|
||||||
if (((K.value = ``), q.rec_type === `email` && !q.email.trim())) {
|
if (((K.value = ``), q.rec_type === `email` && !q.email.trim())) {
|
||||||
@@ -306,6 +315,7 @@ var ue = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 删除收票地址后重载资料。
|
||||||
async function Y(e) {
|
async function Y(e) {
|
||||||
try {
|
try {
|
||||||
(await v.del(`/invoice_address/${e.id}`), await F());
|
(await v.del(`/invoice_address/${e.id}`), await F());
|
||||||
@@ -316,6 +326,7 @@ var ue = {
|
|||||||
let X = ref(!1),
|
let X = ref(!1),
|
||||||
Z = ref(!1),
|
Z = ref(!1),
|
||||||
Q = ref(null);
|
Q = ref(null);
|
||||||
|
// 记录待删除抬头,在确认前不发起删除。
|
||||||
function Ke(e) {
|
function Ke(e) {
|
||||||
((Q.value = {
|
((Q.value = {
|
||||||
kind: `title`,
|
kind: `title`,
|
||||||
@@ -323,6 +334,7 @@ var ue = {
|
|||||||
}),
|
}),
|
||||||
(X.value = !0));
|
(X.value = !0));
|
||||||
}
|
}
|
||||||
|
// 记录待删除地址,复用同一确认弹窗。
|
||||||
function qe(e) {
|
function qe(e) {
|
||||||
((Q.value = {
|
((Q.value = {
|
||||||
kind: `address`,
|
kind: `address`,
|
||||||
@@ -330,6 +342,7 @@ var ue = {
|
|||||||
}),
|
}),
|
||||||
(X.value = !0));
|
(X.value = !0));
|
||||||
}
|
}
|
||||||
|
// 确认时按目标类型调用删除函数,用独立忙碌态阻止重复确认。
|
||||||
async function Je() {
|
async function Je() {
|
||||||
if (Q.value && !Z.value) {
|
if (Q.value && !Z.value) {
|
||||||
Z.value = !0;
|
Z.value = !0;
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 操作日志:系统/API 日志与关键词、排序通过分页接口查询;路由 type 仅接受 api,其余回落为 system。
|
||||||
|
*/
|
||||||
import "~/assets/styles/logbook.Y7gm684m.css";
|
import "~/assets/styles/logbook.Y7gm684m.css";
|
||||||
import { toDisplayString } from "vue";
|
import { toDisplayString } from "vue";
|
||||||
import { watch } from "vue";
|
import { watch } from "vue";
|
||||||
@@ -84,9 +87,11 @@ var k = {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
let J = computed(() => !!F.value || L.value !== `system`);
|
let J = computed(() => !!F.value || L.value !== `system`);
|
||||||
|
// 搜索输入在确认后复制到已应用关键词,并让分页工具重新查询。
|
||||||
function Y() {
|
function Y() {
|
||||||
((F.value = y.value.trim()), q());
|
((F.value = y.value.trim()), q());
|
||||||
}
|
}
|
||||||
|
// 清空筛选并恢复默认 ID 倒序和系统日志类型,再刷新列表。
|
||||||
function X() {
|
function X() {
|
||||||
((y.value = ``),
|
((y.value = ``),
|
||||||
(F.value = ``),
|
(F.value = ``),
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 站内消息:分页筛选、批量已读/删除与详情弹窗;读状态变化同时刷新公共邮箱计数,详情请求用序号隔离快速切换。
|
||||||
|
*/
|
||||||
import "~/assets/styles/NotificationPreferences.DcH8Noxd.css";
|
import "~/assets/styles/NotificationPreferences.DcH8Noxd.css";
|
||||||
import "~/assets/styles/messages.asRdYcVu.css";
|
import "~/assets/styles/messages.asRdYcVu.css";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
@@ -163,12 +166,15 @@ var ge = {
|
|||||||
value: e.name,
|
value: e.name,
|
||||||
})),
|
})),
|
||||||
]);
|
]);
|
||||||
|
// 类型显示优先使用服务端本地化名称,未知类型保留原标识。
|
||||||
function H(e) {
|
function H(e) {
|
||||||
return E.value.find((t) => t.name === e)?.name_lang || e || `—`;
|
return E.value.find((t) => t.name === e)?.name_lang || e || `—`;
|
||||||
}
|
}
|
||||||
|
// 提交后才应用搜索词,避免输入每个字符都发请求。
|
||||||
function Le() {
|
function Le() {
|
||||||
((j.value = A.value.trim()), R());
|
((j.value = A.value.trim()), R());
|
||||||
}
|
}
|
||||||
|
// 清空阅读状态、类型与关键词,重新加载消息列表。
|
||||||
function Re() {
|
function Re() {
|
||||||
((A.value = ``),
|
((A.value = ``),
|
||||||
(j.value = ``),
|
(j.value = ``),
|
||||||
@@ -176,6 +182,7 @@ var ge = {
|
|||||||
(k.value = ``),
|
(k.value = ``),
|
||||||
R());
|
R());
|
||||||
}
|
}
|
||||||
|
// 将指定 ID 标为已读,完成后清除选择并刷新列表与全局未读计数。
|
||||||
async function ze(e) {
|
async function ze(e) {
|
||||||
if (!(!e.length || B.value || G.value)) {
|
if (!(!e.length || B.value || G.value)) {
|
||||||
((B.value = !0), (U.value = ``));
|
((B.value = !0), (U.value = ``));
|
||||||
@@ -193,6 +200,7 @@ var ge = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 使用 all 标记请求服务端全部已读,不局限于当前可见页。
|
||||||
async function Be() {
|
async function Be() {
|
||||||
if (!(B.value || G.value)) {
|
if (!(B.value || G.value)) {
|
||||||
((B.value = !0), (U.value = ``));
|
((B.value = !0), (U.value = ``));
|
||||||
@@ -213,12 +221,14 @@ var ge = {
|
|||||||
let U = ref(``),
|
let U = ref(``),
|
||||||
W = ref(!1),
|
W = ref(!1),
|
||||||
G = ref(!1);
|
G = ref(!1);
|
||||||
|
// 删除前先打开确认弹窗,读状态更新和删除期间不重复触发。
|
||||||
function Ve() {
|
function Ve() {
|
||||||
!z.value.length ||
|
!z.value.length ||
|
||||||
B.value ||
|
B.value ||
|
||||||
G.value ||
|
G.value ||
|
||||||
((U.value = ``), (W.value = !0));
|
((U.value = ``), (W.value = !0));
|
||||||
}
|
}
|
||||||
|
// 仅提交选中消息的 ID;成功后同步列表与未读计数。
|
||||||
async function He() {
|
async function He() {
|
||||||
if (!z.value.length || G.value || B.value) return;
|
if (!z.value.length || G.value || B.value) return;
|
||||||
let e = z.value.map((e) => e.id);
|
let e = z.value.map((e) => e.id);
|
||||||
@@ -244,6 +254,7 @@ var ge = {
|
|||||||
Y = ref(``),
|
Y = ref(``),
|
||||||
X = ref(null),
|
X = ref(null),
|
||||||
Z = 0;
|
Z = 0;
|
||||||
|
// 详情打开时清除旧正文并递增请求序号;加载成功后尝试标读,标读失败不覆盖已加载的正文。
|
||||||
async function Q(e) {
|
async function Q(e) {
|
||||||
let t = ++Z;
|
let t = ++Z;
|
||||||
((X.value = e),
|
((X.value = e),
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 新闻资讯:分类与关键词分页查询,文章可独立打开或嵌入资源中心;正文加载和列表状态分开维护。
|
||||||
|
*/
|
||||||
import "~/assets/styles/news.CbIzdrjt.css";
|
import "~/assets/styles/news.CbIzdrjt.css";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
scrollToTop: !0,
|
scrollToTop: !0,
|
||||||
@@ -131,6 +134,7 @@ var fe = {
|
|||||||
keywords: R.value,
|
keywords: R.value,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
// 新闻分类加载失败不阻止列表使用,保留空分类选项。
|
||||||
async function Ee() {
|
async function Ee() {
|
||||||
try {
|
try {
|
||||||
let e = await F.get(`/news/type`);
|
let e = await F.get(`/news/type`);
|
||||||
@@ -139,9 +143,11 @@ var fe = {
|
|||||||
I.value = [];
|
I.value = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 选择分类后应用其 ID 并重新查询列表。
|
||||||
function De(e) {
|
function De(e) {
|
||||||
((L.value = e === `` || e === void 0 ? `` : Number(e)), U());
|
((L.value = e === `` || e === void 0 ? `` : Number(e)), U());
|
||||||
}
|
}
|
||||||
|
// 摘要先经过公共清理函数,再移除标签、尾部截断实体和多余空格;不能把摘要当可信 HTML。
|
||||||
function Oe(e) {
|
function Oe(e) {
|
||||||
return sanitize_t(e || ``)
|
return sanitize_t(e || ``)
|
||||||
.replace(/<[^>]*>/g, ``)
|
.replace(/<[^>]*>/g, ``)
|
||||||
@@ -158,11 +164,13 @@ var fe = {
|
|||||||
J = ref(null),
|
J = ref(null),
|
||||||
Y = 0,
|
Y = 0,
|
||||||
X = !1;
|
X = !1;
|
||||||
|
// 根据嵌入模式生成资源中心或独立新闻文章地址。
|
||||||
function ke(e) {
|
function ke(e) {
|
||||||
return x?.embedded
|
return x?.embedded
|
||||||
? `/resources?section=news&id=${e}`
|
? `/resources?section=news&id=${e}`
|
||||||
: `/news/article?id=${e}`;
|
: `/news/article?id=${e}`;
|
||||||
}
|
}
|
||||||
|
// 解析文章路由并校验 ID;缺失或无效时取消旧详情请求并清空正文。
|
||||||
async function Z() {
|
async function Z() {
|
||||||
if (X) return;
|
if (X) return;
|
||||||
let e = P.query.id !== void 0 || P.path === `/news/article`,
|
let e = P.query.id !== void 0 || P.path === `/news/article`,
|
||||||
@@ -182,6 +190,7 @@ var fe = {
|
|||||||
create_time: 0,
|
create_time: 0,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 关闭详情时废弃旧请求,并移除 URL 中的文章 ID,保留其余筛选查询。
|
||||||
function Q() {
|
function Q() {
|
||||||
if (
|
if (
|
||||||
((W.value = !1),
|
((W.value = !1),
|
||||||
@@ -199,6 +208,7 @@ var fe = {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 按文章 ID 获取正文,确认新闻对象存在;只有最新请求且未卸载时才写入弹窗。
|
||||||
async function $(e) {
|
async function $(e) {
|
||||||
let t = ++Y;
|
let t = ++Y;
|
||||||
((W.value = !0),
|
((W.value = !0),
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 平台公告:分类、关键词和排序分页查询;详情路由与资源中心嵌入共用加载逻辑,列表和详情分别维护请求代次。
|
||||||
|
*/
|
||||||
import "~/assets/styles/notices.BXNGOj-Q.css";
|
import "~/assets/styles/notices.BXNGOj-Q.css";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
key: (e) => e.fullPath,
|
key: (e) => e.fullPath,
|
||||||
@@ -100,6 +103,7 @@ var ue = {
|
|||||||
B = ref(``),
|
B = ref(``),
|
||||||
V = 0,
|
V = 0,
|
||||||
H = !1;
|
H = !1;
|
||||||
|
// 公告分类独立加载;失败单独显示分类错误,不混淆正文状态。
|
||||||
async function U() {
|
async function U() {
|
||||||
B.value = ``;
|
B.value = ``;
|
||||||
try {
|
try {
|
||||||
@@ -110,6 +114,7 @@ var ue = {
|
|||||||
(B.value = e instanceof Error ? e.message : `公告分类加载失败`);
|
(B.value = e instanceof Error ? e.message : `公告分类加载失败`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 应用搜索词并回到第一页。
|
||||||
function W() {
|
function W() {
|
||||||
((I.value = F.value.trim()), (N.value = 1), Z());
|
((I.value = F.value.trim()), (N.value = 1), Z());
|
||||||
}
|
}
|
||||||
@@ -119,6 +124,7 @@ var ue = {
|
|||||||
J = ref(``),
|
J = ref(``),
|
||||||
Y = ref(null),
|
Y = ref(null),
|
||||||
X = 0;
|
X = 0;
|
||||||
|
// 读取当前分页和筛选的公告;较早的响应或离页响应不再覆盖列表。
|
||||||
async function Z() {
|
async function Z() {
|
||||||
let e = ++V;
|
let e = ++V;
|
||||||
((j.value = !0), (M.value = ``));
|
((j.value = !0), (M.value = ``));
|
||||||
@@ -142,6 +148,7 @@ var ue = {
|
|||||||
!H && e === V && (j.value = !1);
|
!H && e === V && (j.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 打开公告详情前清空上一条正文,只有当前详情请求可以更新弹窗。
|
||||||
async function Q(e) {
|
async function Q(e) {
|
||||||
let t = ++X;
|
let t = ++X;
|
||||||
((G.value = !0),
|
((G.value = !0),
|
||||||
@@ -162,9 +169,11 @@ var ue = {
|
|||||||
t === X && (q.value = !1);
|
t === X && (q.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 把零基分页器事件转换为接口页码,并使用事件给出的每页条数。
|
||||||
function _e(e) {
|
function _e(e) {
|
||||||
((N.value = e.page + 1), (P.value = e.rows), Z());
|
((N.value = e.page + 1), (P.value = e.rows), Z());
|
||||||
}
|
}
|
||||||
|
// 从公告详情路由解析 ID,无效编号只提示,不发送详情请求。
|
||||||
async function $() {
|
async function $() {
|
||||||
if (H) return;
|
if (H) return;
|
||||||
let e = O.query.id !== void 0 || O.path === `/notices/notice`,
|
let e = O.query.id !== void 0 || O.path === `/notices/notice`,
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
/**
|
||||||
|
* 资源中心:帮助、新闻和公告的可访问标签容器;支持 section 参数和后端 plugin 参数,参数解析完成后再挂载对应内容页。
|
||||||
|
*/
|
||||||
import "~/assets/styles/notices.BXNGOj-Q.css";
|
import "~/assets/styles/notices.BXNGOj-Q.css";
|
||||||
import "~/assets/styles/news.CbIzdrjt.css";
|
import "~/assets/styles/news.CbIzdrjt.css";
|
||||||
import "~/assets/styles/help.BSOB30LE.css";
|
import "~/assets/styles/help.BSOB30LE.css";
|
||||||
@@ -79,6 +82,7 @@ var j = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
H = 0;
|
H = 0;
|
||||||
|
// 优先解析 section;只有 plugin 入口才读取插件清单,并用请求代次隔离连续路由切换。
|
||||||
async function U() {
|
async function U() {
|
||||||
let e = ++H;
|
let e = ++H;
|
||||||
((z.value = ``), (R.value = null), (B.value = !0));
|
((z.value = ``), (R.value = null), (B.value = !0));
|
||||||
@@ -98,6 +102,7 @@ var j = {
|
|||||||
e === H && (B.value = !1);
|
e === H && (B.value = !1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 切换分类同时写入 /resources 的 section 查询参数,保持刷新与分享地址可恢复。
|
||||||
function W(e) {
|
function W(e) {
|
||||||
((R.value = e),
|
((R.value = e),
|
||||||
I.push({
|
I.push({
|
||||||
@@ -112,6 +117,7 @@ var j = {
|
|||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
H++;
|
H++;
|
||||||
}));
|
}));
|
||||||
|
// 标签按左右方向键循环切换,Home/End 跳至首尾,并同步焦点到新标签。
|
||||||
function G(e, t) {
|
function G(e, t) {
|
||||||
let n = t;
|
let n = t;
|
||||||
if (e.key === `ArrowRight`) n = (t + 1) % V.length;
|
if (e.key === `ArrowRight`) n = (t + 1) % V.length;
|
||||||
|
|||||||
Reference in new issue
Block a user