feat(ui): 优化控制台响应式布局与视觉体验
前端验证 / verify (push) Failing after 15m3s

- 统一页面标题、圆角、字体和响应式断点,调整暗色主题及图表配色
- 新增表格列标签插件,在窄屏下将表格转换为卡片布局,优化实例、订单、工单等列表展示
- 支持移动端点击订单行进入详情,并完善订单凭据的打印布局
- 在财务中心展示本月及累计消费,补充充值关闭时的提示
- 优化工单详情布局,将附件上传入口整合至富文本编辑器工具栏
- 调整实例操作按钮、SSH 密钥操作及安全菜单图标
- 为多个页面显式导入 definePageMeta,完善页面元数据声明
This commit is contained in:
cneicy committed 2026-11-07 00:09:57 +08:00
1 parent 5d080cacec
commit 42dfead9cd
145 files changed
+1762 -599

No files matched your search

+1
View File
@@ -2,6 +2,7 @@
/**
* 账单详情兼容路由:复用订单详情页面;以 fullPath 为组件键,保证切换账单参数时重新建立详情状态。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
import "~/assets/styles/_id_.gjoJy9S8.css";
definePageMeta({
+1
View File
@@ -2,6 +2,7 @@
/**
* 旧账单列表入口:保留原查询参数与 hash,重定向到 /finance?tab=bills;本页不维护第二份账单列表。
*/
import { definePageMeta } from "#imports";
definePageMeta({
redirect: {
redirect: (e) => ({
+37 -22
View File
@@ -2,6 +2,7 @@
/**
* 财务中心:账单、交易、余额、提现与冻结记录分开加载;钱包入口为本页别名,充值/提现能力由站点配置决定。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/orders.BflDlvVz.css";
import "~/assets/styles/WithdrawDialog.ks0wdKEK.css";
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
@@ -533,6 +534,42 @@ var je = {
),
]),
]),
createElementVNode(`div`, { class: `wallet-stat` }, [
createElementVNode(
`div`,
{ class: `summary-label` },
`本月消费`,
),
createElementVNode(
`div`,
{ class: `wallet-stat-value` },
toDisplayString(
unref(S).overview?.this_month_consume == null ||
unref(S).overview?.this_month_consume === ``
? `—`
: `¥` + unref(S).overview?.this_month_consume,
),
1,
),
]),
createElementVNode(`div`, { class: `wallet-stat` }, [
createElementVNode(
`div`,
{ class: `summary-label` },
`累计消费`,
),
createElementVNode(
`div`,
{ class: `wallet-stat-value` },
toDisplayString(
unref(S).overview?.consume == null ||
unref(S).overview?.consume === ``
? `—`
: `¥` + unref(S).overview?.consume,
),
1,
),
]),
unref(M) === null
? createCommentVNode(``, !0)
: (openBlock(),
@@ -688,7 +725,6 @@ var je = {
{
label: `保存`,
icon: `pi pi-check`,
size: `small`,
loading: unref(A),
onClick: nt,
},
@@ -1867,27 +1903,6 @@ var je = {
[`value`],
),
]),
createElementVNode(`details`, Ze, [
(n[32] ||= createElementVNode(
`summary`,
null,
`消费概览`,
-1,
)),
createElementVNode(
`p`,
null,
` 本月消费:¥` +
toDisplayString(
unref(S).overview?.this_month_consume ?? `—`,
) +
` 累计消费:¥` +
toDisplayString(unref(S).overview?.consume ?? `—`) +
` 累计入账:¥` +
toDisplayString(unref(K)),
1,
),
]),
createVNode(
J,
{
+1
View File
@@ -2,6 +2,7 @@
/**
* 密码找回:手机或邮箱验证码配合验证码挑战提交重置请求,成功后返回登录并保留经处理的站内跳转参数。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PhoneCodeField.CwyHXfML.css";
import "~/assets/styles/GeetestField.DiieTibK.css";
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
+1
View File
@@ -2,6 +2,7 @@
/**
* 帮助中心:支持独立文章路由和资源中心嵌入模式;目录与文章分别加载,通过请求序号防止快速切换文章时出现旧正文。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/help.BSOB30LE.css";
definePageMeta({
scrollToTop: !0,
+1
View File
@@ -2,6 +2,7 @@
/**
* 旧平台单点登录入口:路由守卫负责从 URL 提取并清理凭据;本页只发起服务端验证,支持失败后重试并在离页时取消待处理凭据。
*/
import { definePageMeta } from "#imports";
import { onBeforeUnmount, onMounted, ref } from "vue";
import { useHead, useRouter } from "#app";
import { NuxtLink } from "#components";
+1
View File
@@ -2,6 +2,7 @@
/**
* 发票详情:按查询 ID 加载发票,区分历史登记与正式电子文件;下载链接必须通过协议与字符校验。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/invoice.B6sYFYlb.css";
definePageMeta({
key: (e) => e.fullPath,
+1
View File
@@ -2,6 +2,7 @@
/**
* 会员登录:站点配置决定手机/邮箱密码与短信入口;验证码、安全挑战及第三方登录共用会话核心。attemptVersion 隔离取消、离页和重新提交后的旧响应。
*/
import { definePageMeta } from "#imports";
import {
computed,
onBeforeUnmount,
+1
View File
@@ -2,6 +2,7 @@
/**
* 站内消息:分页筛选、批量已读/删除与详情弹窗;读状态变化同时刷新公共邮箱计数,详情请求用序号隔离快速切换。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/NotificationPreferences.DcH8Noxd.css";
import "~/assets/styles/messages.asRdYcVu.css";
definePageMeta({
+1
View File
@@ -2,6 +2,7 @@
/**
* 新闻资讯:分类与关键词分页查询,文章可独立打开或嵌入资源中心;正文加载和列表状态分开维护。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/news.CbIzdrjt.css";
definePageMeta({
scrollToTop: !0,
+1
View File
@@ -2,6 +2,7 @@
/**
* 平台公告:分类、关键词和排序分页查询;详情路由与资源中心嵌入共用加载逻辑,列表和详情分别维护请求代次。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/notices.BXNGOj-Q.css";
definePageMeta({
key: (e) => e.fullPath,
+1
View File
@@ -2,6 +2,7 @@
/**
* 第三方首次登录绑定:微信扫码和通用 OAuth 使用各自的待绑定会话;先验证授权状态,再以手机/邮箱验证码绑定并校验服务端 JWT。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PhoneCodeField.CwyHXfML.css";
import "~/assets/styles/GeetestField.DiieTibK.css";
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
+1
View File
@@ -2,6 +2,7 @@
/**
* OAuth 回调恢复页:从服务端恢复授权会话,不从 URL 直接接纳登录令牌;结果只能进入登录或继续绑定流程。
*/
import { definePageMeta } from "#imports";
definePageMeta({
layout: `blank`,
});
+1
View File
@@ -2,6 +2,7 @@
/**
* 官网内容页:从公共站点内容模型读取主题、版块顺序、产品及卖点;使用 official-site 布局,主题值与外链展示通过公共工具约束。
*/
import { definePageMeta } from "#imports";
definePageMeta({
layout: `official-site`,
});
+36
View File
@@ -41,6 +41,7 @@ import PaymentDialog from "~/components/PaymentDialog.vue";
import tag from "primevue/tag";
import skeleton from "primevue/skeleton";
import { t as bandwidth_display_t } from "~/lib/bandwidth-display.js";
import { logoUrl } from "~/utils/brand.js";
// 仅从符合续费周期格式的描述中提取商品名,避免把日期区间重复显示成产品标题。
function D(e) {
let t = e.description?.trim() || ``,
@@ -747,6 +748,41 @@ var ue = {
: createCommentVNode(``, !0),
createElementVNode(`div`, me, [
createElementVNode(`article`, he, [
createElementVNode(
`div`,
{
class: `receipt-print-head`,
},
[
createElementVNode(`img`, {
src: logoUrl,
alt: `破碎工坊云`,
class: `receipt-print-logo`,
}),
createElementVNode(
`div`,
{
class: `receipt-print-meta`,
},
[
createElementVNode(
`strong`,
null,
`订单凭据`,
),
createElementVNode(
`span`,
null,
`订单号 #` +
toDisplayString(
unref(j).id,
),
1,
),
],
),
],
),
createElementVNode(`header`, ge, [
createElementVNode(`div`, _e, [
createElementVNode(`span`, ve, [
+23 -6
View File
@@ -217,6 +217,17 @@ var Se = {
function Y(e) {
return C(e, w.value) || `/bills`;
}
function openMobileOrder({ originalEvent, data }) {
if (!window.matchMedia(`(width < 640px)`).matches) return;
const target = originalEvent.target;
if (
target.closest(`a, button, input, [role="checkbox"]`) ||
target.closest(`td`)?.cellIndex === 0
)
return;
const destination = C(data.id, w.value);
if (destination) navigateTo(destination);
}
let X = computed(() =>
N.value.filter(
(e) => String(e.status) === `Unpaid` && e.type !== `on_demand`,
@@ -639,6 +650,7 @@ var Se = {
first: (unref(K) - 1) * unref(q),
dataKey: `id`,
rowSelectable: Be,
onRowClick: openMobileOrder,
metaKeySelection: !1,
},
{
@@ -670,7 +682,7 @@ var Se = {
{
header: `下单时间`,
style: {
"min-width": `170px`,
"white-space": `nowrap`,
},
},
{
@@ -692,7 +704,7 @@ var Se = {
{
header: `ID`,
style: {
width: `120px`,
"white-space": `nowrap`,
},
},
{
@@ -747,6 +759,7 @@ var Se = {
{
header: `商品`,
style: {
width: `100%`,
"min-width": `220px`,
},
},
@@ -777,7 +790,7 @@ var Se = {
{
header: `支付方式`,
style: {
"min-width": `130px`,
"white-space": `nowrap`,
},
},
{
@@ -797,7 +810,7 @@ var Se = {
{
header: `状态`,
style: {
width: `110px`,
"white-space": `nowrap`,
},
},
{
@@ -824,8 +837,10 @@ var Se = {
y,
{
header: `总价`,
headerClass: `amount-heading`,
bodyClass: `amount-cell`,
style: {
width: `120px`,
"white-space": `nowrap`,
},
},
{
@@ -844,8 +859,10 @@ var Se = {
y,
{
header: ``,
bodyClass: `action-cell`,
style: {
width: `115px`,
width: `1%`,
"white-space": `nowrap`,
},
},
{
+1
View File
@@ -2,6 +2,7 @@
/**
* 旧订单详情路由适配层:复用 /orders/[id] 的详情实现,并以完整地址为组件键以响应查询 ID 变化。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
import "~/assets/styles/_id_.gjoJy9S8.css";
definePageMeta({
+1
View File
@@ -2,6 +2,7 @@
/**
* 旧支付结果路由适配层:复用订单详情及服务端订单查询,不能仅凭跳入此路径认定付款成功。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
import "~/assets/styles/_id_.gjoJy9S8.css";
definePageMeta({
+1
View File
@@ -2,6 +2,7 @@
/**
* 旧订单支付路由适配层:复用订单详情,详情页根据 /pay 后缀展示支付流程;本文件不自行确认支付结果。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
import "~/assets/styles/_id_.gjoJy9S8.css";
definePageMeta({
+1
View File
@@ -2,6 +2,7 @@
/**
* 商品详情/购物车编辑入口:校验商品与编辑位置,按服务端模块选择配置器;下单结果交给公共支付弹窗处理。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/MfDcimConfig.BhC_eZ0V.css";
import "~/assets/styles/MfCloudConfig.DbgUu8qr.css";
import "~/assets/styles/KkyEcsConfig.BFaAwQPZ.css";
+1
View File
@@ -2,6 +2,7 @@
/**
* 云服务器订购:先筛出云服务分类,再按分页商品选择对应模块配置器;分类和商品详情各用独立代次处理快速切换。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/MfCloudConfig.DbgUu8qr.css";
import "~/assets/styles/KkyEcsConfig.BFaAwQPZ.css";
import "~/assets/styles/ConfigResourceOption.Dj4VopnA.css";
@@ -2,6 +2,7 @@
/**
* 物理服务器定制入口:只接受有效商品 ID 且模块为 mf_dcim/remf_dcim,避免把其他类型商品交给物理服务器配置器。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/dedicated-server.CiJfMYtk.css";
import "~/assets/styles/ConfigDiskCard.Dx9IqqQ_.css";
import "~/assets/styles/PromoCodeField.qFEkB6Hm.css";
+1
View File
@@ -2,6 +2,7 @@
/**
* 账号注册:站点配置控制手机/邮箱入口、验证码要求和动态资料;提交成功跳回登录,不在本页假定已取得登录会话。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PhoneCodeField.CwyHXfML.css";
import "~/assets/styles/GeetestField.DiieTibK.css";
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
+1
View File
@@ -2,6 +2,7 @@
/**
* 独立远控窗口:校验 hostId 与受支持模块后挂载 RemoteConsole;mf_dcim 先收集操作密码,页面只管理连接界面,不在前端保存长期远控凭据。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/RemoteConsole.DLmX5UZu.css";
import "~/assets/styles/remote-console.zcxaOxxS.css";
definePageMeta({
+1
View File
@@ -2,6 +2,7 @@
/**
* 域名白名单:按主机及审核状态查询记录;提交前必须加载可用主机、实名认证状态和当前主机对应的动态表单。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/domains.GiD6NSti.css";
definePageMeta({
alias: [`/security/domain-whitelist`],
+1
View File
@@ -2,6 +2,7 @@
/**
* 安全组:组列表、出入站规则与实例关联共用页面;主列表、规则、已关联和可关联主机分别用请求代次隔离,批量关联保留失败目标供重试。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/PageInfoNotice._16xRFrB.css";
import "~/assets/styles/groups.Buw8nwl1.css";
definePageMeta({
+5 -2
View File
@@ -325,24 +325,27 @@ onBeforeUnmount(() => {
}}</span>
</template>
</Column>
<Column header="操作" style="width: 200px">
<Column header="操作" style="width: 240px">
<template #body="{ data }">
<div class="row-actions" data-v-31489433>
<Button
:label="copiedKeyId === data.id ? '已复制' : '复制'"
:icon="copiedKeyId === data.id ? 'pi pi-check' : 'pi pi-copy'"
size="small"
severity="secondary"
outlined
text
@click="copyPublicKey(data)"
/>
<Button
label="编辑"
icon="pi pi-pencil"
size="small"
severity="secondary"
text
@click="openEditDialog(data)"
/>
<Button
label="删除"
icon="pi pi-trash"
aria-label="删除密钥"
size="small"
+23 -2
View File
@@ -2,6 +2,7 @@
/**
* 实例详情调度页:先确认主机与商品,再解析实际管理模块;统一展示数据与能力开关,云/物理/通用旧模块分别委派管理组件。权限展示不替代后端鉴权。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/InstanceLoadingShell.CwfiUwdU.css";
import "~/assets/styles/FlowPacketPanel.-RJSx13z.css";
import "~/assets/styles/InstanceServiceInfo.BftSVIeW.css";
@@ -2070,6 +2071,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `开机`,
icon: `pi pi-power-off`,
severity: `success`,
outlined: ``,
loading:
unref(Y) === `on`,
disabled:
@@ -2094,6 +2096,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `关机`,
icon: `pi pi-power-off`,
severity: `danger`,
outlined: ``,
loading:
unref(Y) === `off`,
disabled:
@@ -2117,6 +2120,8 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
key: 2,
label: `重启`,
icon: `pi pi-refresh`,
severity: `secondary`,
outlined: ``,
loading:
unref(Y) === `reboot`,
disabled:
@@ -2141,6 +2146,8 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
key: 3,
label: `VNC`,
icon: `pi pi-desktop`,
severity: `secondary`,
outlined: ``,
disabled: unref(D),
onClick: tn,
},
@@ -2156,7 +2163,9 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
}),
createVNode(u, {
label: `更多`,
icon: `pi pi-plus`,
icon: `pi pi-ellipsis-h`,
severity: `secondary`,
outlined: ``,
onClick: (r[5] ||= (e) =>
unref(an).toggle(e)),
}),
@@ -2178,6 +2187,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `开机`,
icon: `pi pi-power-off`,
severity: `success`,
outlined: ``,
disabled:
!unref(W)?.control,
onClick: (r[6] ||= (e) =>
@@ -2193,6 +2203,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `关机`,
icon: `pi pi-power-off`,
severity: `danger`,
outlined: ``,
disabled:
!unref(W)?.control,
onClick: (r[7] ||= (e) =>
@@ -2207,6 +2218,8 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
{
label: `重启`,
icon: `pi pi-refresh`,
severity: `secondary`,
outlined: ``,
disabled:
!unref(W)?.control,
onClick: (r[8] ||= (e) =>
@@ -2221,6 +2234,8 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
{
label: `VNC`,
icon: `pi pi-desktop`,
severity: `secondary`,
outlined: ``,
disabled:
!unref(W)?.control,
onClick: (r[9] ||= (e) =>
@@ -2250,7 +2265,9 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
),
createVNode(u, {
label: `更多`,
icon: `pi pi-plus`,
icon: `pi pi-ellipsis-h`,
severity: `secondary`,
outlined: ``,
onClick: (r[10] ||= (e) =>
unref(an).toggle(e)),
}),
@@ -2275,6 +2292,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `开机`,
icon: `pi pi-power-off`,
severity: `success`,
outlined: ``,
loading:
unref(Y) === `on`,
disabled:
@@ -2304,6 +2322,7 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
label: `关机`,
icon: `pi pi-power-off`,
severity: `danger`,
outlined: ``,
loading:
unref(Y) ===
`off`,
@@ -2333,6 +2352,8 @@ var Ae = publicAssetsURL(`/images/reference/cloud-server.png`),
key: 2,
label: `重启`,
icon: `pi pi-refresh`,
severity: `secondary`,
outlined: ``,
loading:
unref(Y) ===
`reboot`,
+54 -48
View File
@@ -2,6 +2,7 @@
/**
* 工单详情:把首帖与回复按时间组成对话,支持引用、附件上传、回复、催单与关闭;附件使用服务端保存标识提交。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/TicketAttachments.DtbJGLkE.css";
import "~/assets/styles/RichTextEditor.NkmgPT5m.css";
import "~/assets/styles/_id_.C-0--Lx-.css";
@@ -187,7 +188,9 @@ var le = {
? e.admin_name || `客服`
: e.client_name || `我`;
}
let $ = computed(() => Z.value.find((e) => e.id === Y.value));
let $ = computed(() =>
Y.value > 0 ? Z.value.find((e) => e.id === Y.value) : void 0,
);
// 关闭工单不允许上传;逐个上传并检查 save_name,成功部分保留在当前附件草稿。
async function xe(e) {
if (J.value || G.value || V.value?.status === `已关闭`) return;
@@ -371,18 +374,24 @@ var le = {
createElementVNode(`div`, fe, [
createElementVNode(`div`, pe, [
createElementVNode(`div`, me, [
createElementVNode(
`span`,
he,
`#` + toDisplayString(unref(V).ticket_num),
1,
),
createElementVNode(
`h2`,
null,
toDisplayString(unref(V).title),
1,
),
createElementVNode(
`span`,
{
class: `status-tag`,
style: normalizeStyle({
color: `var(--p-text-color)`,
borderColor: unref(V).color,
}),
},
toDisplayString(unref(V).status),
5,
),
]),
unref(V).status === `已关闭`
? createCommentVNode(``, !0)
@@ -402,24 +411,14 @@ var le = {
8,
[`loading`],
)),
createElementVNode(
`span`,
{
class: `status-tag`,
style: normalizeStyle({
color: `var(--p-text-color)`,
borderColor: unref(V).color,
}),
},
toDisplayString(unref(V).status),
5,
),
]),
createElementVNode(`div`, ge, [
createElementVNode(
`span`,
null,
`提交时间:` +
`#` +
toDisplayString(unref(V).ticket_num) +
` · 提交于 ` +
toDisplayString(
(`formatTime` in n
? n.formatTime
@@ -625,38 +624,45 @@ var le = {
placeholder: `输入回复内容…`,
disabled: unref(V).status === `已关闭`,
},
null,
{
"toolbar-end": withCtx(() => [
createElementVNode(`label`, L, [
(a[3] ||= createElementVNode(
`i`,
{
class: `pi pi-paperclip`,
},
null,
-1,
)),
(a[4] ||= createTextVNode(
`添加附件`,
-1,
)),
createElementVNode(
`input`,
{
id: `reply-files`,
type: `file`,
multiple: ``,
disabled:
unref(G) ||
unref(J) ||
unref(V).status === `已关闭`,
onChange: xe,
},
null,
40,
_e,
),
]),
]),
_: 1,
},
8,
[`modelValue`, `disabled`],
),
createElementVNode(`div`, I, [
createElementVNode(`label`, L, [
(a[3] ||= createElementVNode(
`i`,
{
class: `pi pi-paperclip`,
},
null,
-1,
)),
(a[4] ||= createTextVNode(`添加附件`, -1)),
createElementVNode(
`input`,
{
id: `reply-files`,
type: `file`,
multiple: ``,
disabled:
unref(G) ||
unref(J) ||
unref(V).status === `已关闭`,
onChange: xe,
},
null,
40,
_e,
),
]),
unref(J)
? (openBlock(),
createElementBlock(
+1
View File
@@ -2,6 +2,7 @@
/**
* 旧工单详情路由适配层:复用动态详情页;完整地址变化时重建详情,避免沿用上一工单的 ID 与草稿。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/TicketAttachments.DtbJGLkE.css";
import "~/assets/styles/RichTextEditor.NkmgPT5m.css";
import "~/assets/styles/_id_.C-0--Lx-.css";
+1
View File
@@ -2,6 +2,7 @@
/**
* 实例转移:可转移、待接收和记录各自走服务端列表;发起前验证接收人转移码,敏感请求可由安全挑战续接,手续费订单独立支付。
*/
import { definePageMeta } from "#imports";
import "~/assets/styles/GeetestField.DiieTibK.css";
import "~/assets/styles/CaptchaField.BSN3ZbsD.css";
import "~/assets/styles/SecurityVerificationDialog.skYFo4v7.css";