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

+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";