- 统一页面标题、圆角、字体和响应式断点,调整暗色主题及图表配色 - 新增表格列标签插件,在窄屏下将表格转换为卡片布局,优化实例、订单、工单等列表展示 - 支持移动端点击订单行进入详情,并完善订单凭据的打印布局 - 在财务中心展示本月及累计消费,补充充值关闭时的提示 - 优化工单详情布局,将附件上传入口整合至富文本编辑器工具栏 - 调整实例操作按钮、SSH 密钥操作及安全菜单图标 - 为多个页面显式导入 definePageMeta,完善页面元数据声明
This commit is contained in:
145 files changed
+1762
-599
No files matched your search
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 账单详情兼容路由:复用订单详情页面;以 fullPath 为组件键,保证切换账单参数时重新建立详情状态。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||
import "~/assets/styles/_id_.gjoJy9S8.css";
|
||||
definePageMeta({
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 旧账单列表入口:保留原查询参数与 hash,重定向到 /finance?tab=bills;本页不维护第二份账单列表。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
definePageMeta({
|
||||
redirect: {
|
||||
redirect: (e) => ({
|
||||
|
||||
+37
-22
@@ -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,
|
||||
{
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 帮助中心:支持独立文章路由和资源中心嵌入模式;目录与文章分别加载,通过请求序号防止快速切换文章时出现旧正文。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/help.BSOB30LE.css";
|
||||
definePageMeta({
|
||||
scrollToTop: !0,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 旧平台单点登录入口:路由守卫负责从 URL 提取并清理凭据;本页只发起服务端验证,支持失败后重试并在离页时取消待处理凭据。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import { onBeforeUnmount, onMounted, ref } from "vue";
|
||||
import { useHead, useRouter } from "#app";
|
||||
import { NuxtLink } from "#components";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 发票详情:按查询 ID 加载发票,区分历史登记与正式电子文件;下载链接必须通过协议与字符校验。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/invoice.B6sYFYlb.css";
|
||||
definePageMeta({
|
||||
key: (e) => e.fullPath,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 会员登录:站点配置决定手机/邮箱密码与短信入口;验证码、安全挑战及第三方登录共用会话核心。attemptVersion 隔离取消、离页和重新提交后的旧响应。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import {
|
||||
computed,
|
||||
onBeforeUnmount,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 站内消息:分页筛选、批量已读/删除与详情弹窗;读状态变化同时刷新公共邮箱计数,详情请求用序号隔离快速切换。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/NotificationPreferences.DcH8Noxd.css";
|
||||
import "~/assets/styles/messages.asRdYcVu.css";
|
||||
definePageMeta({
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 新闻资讯:分类与关键词分页查询,文章可独立打开或嵌入资源中心;正文加载和列表状态分开维护。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/news.CbIzdrjt.css";
|
||||
definePageMeta({
|
||||
scrollToTop: !0,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 平台公告:分类、关键词和排序分页查询;详情路由与资源中心嵌入共用加载逻辑,列表和详情分别维护请求代次。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/notices.BXNGOj-Q.css";
|
||||
definePageMeta({
|
||||
key: (e) => e.fullPath,
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* OAuth 回调恢复页:从服务端恢复授权会话,不从 URL 直接接纳登录令牌;结果只能进入登录或继续绑定流程。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
definePageMeta({
|
||||
layout: `blank`,
|
||||
});
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 官网内容页:从公共站点内容模型读取主题、版块顺序、产品及卖点;使用 official-site 布局,主题值与外链展示通过公共工具约束。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
definePageMeta({
|
||||
layout: `official-site`,
|
||||
});
|
||||
|
||||
@@ -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, [
|
||||
|
||||
@@ -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`,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 旧订单详情路由适配层:复用 /orders/[id] 的详情实现,并以完整地址为组件键以响应查询 ID 变化。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||
import "~/assets/styles/_id_.gjoJy9S8.css";
|
||||
definePageMeta({
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 旧支付结果路由适配层:复用订单详情及服务端订单查询,不能仅凭跳入此路径认定付款成功。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||
import "~/assets/styles/_id_.gjoJy9S8.css";
|
||||
definePageMeta({
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 旧订单支付路由适配层:复用订单详情,详情页根据 /pay 后缀展示支付流程;本文件不自行确认支付结果。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/PaymentDialog.BNFKQF1U.css";
|
||||
import "~/assets/styles/_id_.gjoJy9S8.css";
|
||||
definePageMeta({
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 域名白名单:按主机及审核状态查询记录;提交前必须加载可用主机、实名认证状态和当前主机对应的动态表单。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/domains.GiD6NSti.css";
|
||||
definePageMeta({
|
||||
alias: [`/security/domain-whitelist`],
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/**
|
||||
* 安全组:组列表、出入站规则与实例关联共用页面;主列表、规则、已关联和可关联主机分别用请求代次隔离,批量关联保留失败目标供重试。
|
||||
*/
|
||||
import { definePageMeta } from "#imports";
|
||||
import "~/assets/styles/PageInfoNotice._16xRFrB.css";
|
||||
import "~/assets/styles/groups.Buw8nwl1.css";
|
||||
definePageMeta({
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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(
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in new issue
Block a user