From 96b5c3ee45b568982a165abeaa4f811dc8272bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Thu, 28 Aug 2025 16:44:04 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=88=20perf:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=A0=B7=E5=BC=8F=E7=9A=84=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klp-ui/src/assets/images/avatar.png | Bin 0 -> 47263 bytes klp-ui/src/assets/styles/element-ui.scss | 467 ++++++++++++++++-- klp-ui/src/components/MarkdownPreview.vue | 18 +- klp-ui/src/store/modules/user.js | 2 +- .../src/views/components/AllApplications.vue | 19 +- klp-ui/src/views/components/FlowTable.vue | 3 +- .../src/views/components/OrderDashboard.vue | 3 +- .../components/FinanceVoucherTable.vue | 120 ++++- klp-ui/src/views/finance/document/index.vue | 20 - klp-ui/src/views/index.vue | 7 - klp-ui/src/views/login.vue | 55 ++- klp-ui/src/views/mes/qc/files/index.vue | 406 +++++++++++++-- klp-ui/src/views/wms/hotProduct/index.vue | 17 - .../wms/order/components/PerformanceArea.vue | 4 +- klp-ui/src/views/wms/order/dashboard.vue | 1 - 15 files changed, 977 insertions(+), 165 deletions(-) create mode 100644 klp-ui/src/assets/images/avatar.png diff --git a/klp-ui/src/assets/images/avatar.png b/klp-ui/src/assets/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..357f31d405ff17356a3928249e55be3ed6eff6c0 GIT binary patch literal 47263 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%0Ap1I-A%k5^p>MEI17kK9B4mi;y=tSWo` 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 literal 0 HcmV?d00001 diff --git a/klp-ui/src/assets/styles/element-ui.scss b/klp-ui/src/assets/styles/element-ui.scss index d83e5318..33e2eaee 100644 --- a/klp-ui/src/assets/styles/element-ui.scss +++ b/klp-ui/src/assets/styles/element-ui.scss @@ -1,9 +1,14 @@ // ====================== 1. 基础颜色变量(Sass直接处理)====================== -$primary-base: #5F7BA0; /* 工业蓝灰(主色原始值) */ -$success-base: #2ECC71; /* 成功色原始值 */ -$warning-base: #E67E22; /* 警告色原始值 */ -$danger-base: #E74C3C; /* 危险色原始值 */ -$info-base: #AEB6BF; /* 次主色原始值 */ +$primary-base: #5F7BA0; +/* 工业蓝灰(主色原始值) */ +$success-base: #2ECC71; +/* 成功色原始值 */ +$warning-base: #E67E22; +/* 警告色原始值 */ +$danger-base: #E74C3C; +/* 危险色原始值 */ +$info-base: #AEB6BF; +/* 次主色原始值 */ // 背景色原始值 $background-base: #2B2F36; @@ -38,26 +43,27 @@ $--border-color: $border-color-base; --color-warning: #{$warning-base}; --color-danger: #{$danger-base}; --color-info: #{$info-base}; - + /* 背景层级 */ --color-background: #{$background-base}; --color-background-light: #{$background-light-base}; --color-background-lighter: #{$background-lighter-base}; --panel-bg: #{$panel-bg-base}; --table-bg: #{$table-bg-base}; - + /* 文本色 */ --color-text-primary: #FFFFFF; --color-text-regular: #EAEAEA; --color-text-secondary: #B6BDC5; --color-text-placeholder: #8A9098; - + /* 边框色 */ --border-color-base: #{$border-color-base}; --border-color-light: #{$border-color-light}; --border-color-lighter: #{$border-color-lighter}; - --border-color: #{$--border-color}; /* 同步新增的边框色变量 */ - + --border-color: #{$--border-color}; + /* 同步新增的边框色变量 */ + /* 间距/尺寸体系 */ --spacing-sm: #{$--spacing-sm}; --spacing-base: #{$--spacing-base}; @@ -65,13 +71,13 @@ $--border-color: $border-color-base; --spacing-lg: #{$--spacing-lg}; --form-item-margin: #{$--form-item-margin}; --btn-height: #{$--btn-height}; - + /* 金属质感变量 */ --metal-gradient-light: linear-gradient(145deg, #3E434A, #363B41); --metal-gradient-dark: linear-gradient(145deg, #363B41, #3E434A); - --metal-highlight: rgba(255,255,255,.14); - --metal-shadow: 5px 5px 12px rgba(0,0,0,.22), -5px -5px 12px rgba(255,255,255,.06); - --metal-shadow-inset: inset 3px 3px 6px rgba(0,0,0,.28), inset -3px -3px 6px rgba(255,255,255,.06); + --metal-highlight: rgba(255, 255, 255, .14); + --metal-shadow: 5px 5px 12px rgba(0, 0, 0, .22), -5px -5px 12px rgba(255, 255, 255, .06); + --metal-shadow-inset: inset 3px 3px 6px rgba(0, 0, 0, .28), inset -3px -3px 6px rgba(255, 255, 255, .06); } @@ -97,7 +103,8 @@ $--color-text-placeholder: var(--color-text-placeholder) !default; $--border-color-base: $border-color-base !default; $--border-color-light: $border-color-light !default; $--border-color-lighter: $border-color-lighter !default; -$--border-color: $--border-color !default; /* 关键修复:同步到Element变量 */ +$--border-color: $--border-color !default; +/* 关键修复:同步到Element变量 */ // 间距变量 $--spacing-sm: $--spacing-sm !default; @@ -156,7 +163,7 @@ body { border: 1px solid $border-color; box-shadow: $--metal-shadow; border-radius: 6px; - text-shadow: 0 1px 0 rgba(0,0,0,.16); + text-shadow: 0 1px 0 rgba(0, 0, 0, .16); transition: all .25s ease; height: $--btn-height; padding: 0 var(--spacing-lg); @@ -167,7 +174,7 @@ body { color: $text-color; background: $--metal-gradient-dark; border-color: $--border-color-base; - box-shadow: 6px 6px 14px rgba(0,0,0,.28), -6px -6px 14px rgba(255,255,255,.08); + box-shadow: 6px 6px 14px rgba(0, 0, 0, .28), -6px -6px 14px rgba(255, 255, 255, .08); transform: translateY(-1px); } @@ -188,30 +195,33 @@ body { // 主按钮(品牌梯度) .el-button--primary { @include button-variant(#fff, darken($--color-primary, 10%)); - background: linear-gradient(145deg, lighten($--color-primary,6%), darken($--color-primary,6%)); - border-color: darken($--color-primary,10%); + background: linear-gradient(145deg, lighten($--color-primary, 6%), darken($--color-primary, 6%)); + border-color: darken($--color-primary, 10%); &:hover { - background: linear-gradient(145deg, $--color-primary, darken($--color-primary,8%)); + background: linear-gradient(145deg, $--color-primary, darken($--color-primary, 8%)); } } // 功能按钮(统一风格) .el-button--success { @include button-variant(#fff, darken($--color-success, 10%)); - background: linear-gradient(145deg, lighten($--color-success,6%), darken($--color-success,6%)); + background: linear-gradient(145deg, lighten($--color-success, 6%), darken($--color-success, 6%)); } + .el-button--warning { @include button-variant(#fff, darken($--color-warning, 10%)); - background: linear-gradient(145deg, lighten($--color-warning,6%), darken($--color-warning,6%)); + background: linear-gradient(145deg, lighten($--color-warning, 6%), darken($--color-warning, 6%)); } + .el-button--danger { @include button-variant(#fff, darken($--color-danger, 10%)); - background: linear-gradient(145deg, lighten($--color-danger,6%), darken($--color-danger,6%)); + background: linear-gradient(145deg, lighten($--color-danger, 6%), darken($--color-danger, 6%)); } + .el-button--info { @include button-variant(#111, darken($--color-info, 10%)); - background: linear-gradient(145deg, lighten($--color-info,6%), darken($--color-info,6%)); + background: linear-gradient(145deg, lighten($--color-info, 6%), darken($--color-info, 6%)); } // 文本按钮(低干扰) @@ -253,9 +263,11 @@ body { border-radius: 6px 0 0 6px; border-left: none; } + &:last-child { border-radius: 0 6px 6px 0; } + &:not(:last-child) { border-right: none; } @@ -287,7 +299,7 @@ body { // 表头(深灰黑 + 纯白文字) .el-table__header-wrapper { - th { + th.el-table__cell { background: #1F2227; color: $--color-text-primary; font-weight: 600; @@ -301,21 +313,25 @@ body { // 表体(奇偶行交替 + hover高亮) .el-table__body-wrapper { .el-table__row { + // 奇数行 &:nth-child(odd) .el-table__cell { background: #2F3339; color: #EAEAEA; } + // 偶数行 &:nth-child(even) .el-table__cell { background: #353A40; color: #EAEAEA; } + // hover &:hover .el-table__cell { background: rgba($--color-primary, 0.25); color: #888888; } + // 当前行 &.current-row .el-table__cell { background: rgba($--color-primary, 0.35); @@ -366,6 +382,257 @@ body { } } +.el-table__fixed-right { + // 表头(深灰黑 + 纯白文字) + .el-table__fixed-header-wrapper { + th.el-table__cell { + background: #1F2227; + color: $--color-text-primary; + font-weight: 600; + border-bottom: 1px solid #444A52; + padding: 4px !important; // 紧凑 padding + font-size: 13px; + } + } + + // 表体(奇偶行交替 + hover高亮) + .el-table__fixed-body-wrapper { + .el-table__row { + + // 奇数行 + &:nth-child(odd) .el-table__cell { + background: #2F3339; + color: #EAEAEA; + } + + // 偶数行 + &:nth-child(even) .el-table__cell { + background: #353A40; + color: #EAEAEA; + } + + // 当前行 + &.current-row .el-table__cell { + background: rgba($--color-primary, 0.35); + color: $--color-text-primary; + font-weight: 600; + } + } + } +} + +// ---------------------- 3.2 日期范围选择器 ---------------------- +// 日期范围选择器主题样式 +.el-date-editor { + height: $--btn-height; + + // 基础样式 + &.el-range-editor { + background: $--color-background; + border: 1px solid $--border-color; + border-radius: 4px; + color: $--color-text-regular; + height: $--btn-height; + padding: 0 8px; + box-shadow: none; + transition: all 0.2s ease; + + // 悬停状态 + &:hover { + border-color: $--color-primary; + box-shadow: 0 0 0 2px rgba($--color-primary, 0.2); + } + + // 聚焦状态 + &.is-focus { + border-color: $--color-primary; + box-shadow: 0 0 0 2px rgba($--color-primary, 0.2); + outline: none; + } + + // 图标样式 + .el-input__icon { + color: $--color-text-secondary; + width: 18px; + height: 18px; + line-height: 18px; + + &:hover { + color: $--color-primary; + } + } + + // 输入框样式 + .el-range-input { + background: transparent; + border: none; + color: $--color-text-regular; + padding: 0 4px; + height: 100%; + font-size: 13px; + width: 80px; + + &::placeholder { + color: $--color-text-placeholder; + } + + &:focus { + outline: none; + } + } + + // 分隔符样式 + .el-range-separator { + color: $--color-text-secondary; + padding: 0 4px; + font-size: 13px; + } + + // 清除图标 + .el-range__close-icon { + margin-left: 4px; + + &:hover { + color: $--color-danger; + } + } + } + + &--medium.el-input__inner { + height: auto; + } +} + +.el-range-editor--medium.el-input__inner { + height: $--btn-height !important; + width: auto !important; + + .el-range-separator { + padding: 0; + line-height: 16px; + font-size: 13px; + color: $--color-text-secondary; + } +} + +// 日期选择面板样式 +.el-picker-panel { + background: $--color-background; + border: 1px solid $--border-color; + border-radius: 6px; + box-shadow: $--metal-shadow; + color: $--color-text-regular; + + // 头部导航 + .el-picker-panel__header { + border-bottom: 1px solid $--border-color-lighter; + padding: 6px 10px; + + button { + color: $--color-text-secondary; + + &:hover { + color: $--color-primary; + background: rgba($--color-primary, 0.1); + } + } + + .el-picker-panel__icon-btn { + width: 24px; + height: 24px; + line-height: 24px; + border-radius: 4px; + } + + .el-date-picker__header-label { + color: $--color-text-primary; + font-weight: 500; + } + } + + // 日期表格 + .el-date-table { + border-collapse: separate; + border-spacing: 2px; + + th { + color: $--color-text-secondary; + font-weight: normal; + padding: 4px 0; + font-size: 12px; + } + + td { + padding: 0; + + .el-date-table__cell { + width: 28px; + height: 28px; + line-height: 28px; + border-radius: 4px; + margin: 1px; + font-size: 13px; + + &:hover { + background: rgba($--color-primary, 0.2); + } + + &.current { + background: $--color-primary; + color: #fff; + } + + &.in-range { + background: rgba($--color-primary, 0.1); + + &::before { + background: $--color-primary; + } + } + + &.start-date, + &.end-date { + background: $--color-primary; + color: #fff; + } + } + } + } + + // 范围选择器底部按钮 + .el-range-picker__footer { + border-top: 1px solid $--border-color-lighter; + padding: 6px 10px; + + button { + background: $--color-background-light; + border: 1px solid $--border-color; + color: $--color-text-regular; + height: 24px; + line-height: 22px; + padding: 0 12px; + font-size: 12px; + border-radius: 4px; + + &:hover { + background: rgba($--color-primary, 0.2); + border-color: $--color-primary; + } + + &.el-button--primary { + background: $--color-primary; + border-color: $--color-primary; + color: #fff; + + &:hover { + background: lighten($--color-primary, 10%); + border-color: lighten($--color-primary, 10%); + } + } + } + } +} + // 自定义表格工具类(补充紧凑) .small-padding .cell { padding-left: calc($--spacing-base / 2); @@ -382,7 +649,6 @@ body { // 表单项布局 .el-form-item { margin-bottom: $--form-item-margin !important; - label-align: right; // 标签右对齐 font-size: 13px; // 标签样式 @@ -412,7 +678,6 @@ body { border-radius: 0; height: $--btn-height; line-height: $--btn-height; - padding: 0 $--spacing-base; font-size: 13px; &::placeholder { @@ -508,12 +773,15 @@ body { .el-input-number__increase { border-radius: 0; + .el-icon-plus { color: $--color-text-regular; } } + .el-input-number__decrease { border-radius: 0; + .el-icon-minus { color: $--color-text-regular; } @@ -521,6 +789,7 @@ body { // 迷你尺寸 &.el-input-number--small { + .el-input-number__increase, .el-input-number__decrease { width: 24px; @@ -556,6 +825,7 @@ body { &:hover { background-color: rgba($--color-primary, .12); } + &.selected { background-color: rgba($--color-primary, .20); color: #fff; @@ -580,6 +850,7 @@ body { .el-slider__bar { background: $--metal-gradient-dark; } + .el-slider__button { background: $--metal-gradient-light; border-color: $--border-color-light; @@ -649,6 +920,10 @@ body { border-bottom: 1px solid $--border-color-lighter; } + .el-dialog__title { + color: $--color-text-primary; + } + // 对话框主体 .el-dialog__body { padding: $--spacing-lg; @@ -699,11 +974,12 @@ body { &::after { background: $--metal-gradient-light; } + border-color: $--border-color-light; } } -.el-button-group + .el-popover { +.el-button-group+.el-popover { margin-left: 5px; } @@ -715,8 +991,8 @@ body { // 标签栏 .el-tabs__header { - margin: 0 0 var(--spacing-lg) 0; - padding: 0 var(--spacing-base); + margin: 0; + padding: 0; border-bottom: 1px solid $--border-color-light; background-color: transparent; @@ -724,7 +1000,7 @@ body { .el-tabs__nav { height: 40px; line-height: 40px; - background-color: $--color-background-light; + // background-color: $--color-background-light; border-radius: 6px 6px 0 0; padding: 0 var(--spacing-base); box-shadow: inset 0 -1px 0 $--border-color-light; @@ -735,8 +1011,8 @@ body { color: $--color-text-secondary; height: 40px; line-height: 40px; - padding: 0 var(--spacing-lg); - margin: 0 var(--spacing-sm); + // padding: 0 var(--spacing-lg); + // margin: 0 var(--spacing-sm); font-size: 13px; transition: all 0.2s ease; border-bottom: 2px solid transparent; @@ -744,7 +1020,7 @@ body { // 悬停状态 &:hover { color: $--color-primary; - background-color: rgba($--color-primary, 0.08); + // background-color: rgba($--color-primary, 0.08); border-bottom-color: rgba($--color-primary, 0.3); } @@ -753,7 +1029,7 @@ body { color: $--color-primary; font-weight: 500; border-bottom-color: $--color-primary; - background-color: rgba($--color-primary, 0.1); + // background-color: rgba($--color-primary, 0.1); } // 禁用状态 @@ -1055,6 +1331,123 @@ body { } } +// ====================== 描述列表组件(el-descriptions)- 深色模式 ====================== +.el-descriptions { + width: 100%; + background: $--color-background; // 黑色背景 + box-shadow: $--metal-shadow; + overflow: hidden; + color: $--color-text-primary; // 白色文字 + + // 描述列表头部 + &__header { + padding: $--spacing-base $--spacing-lg; + border-bottom: 1px solid $--border-color-lighter; + background: $--metal-gradient-dark; + color: $--color-text-primary; // 白色标题 + font-weight: 600; + font-size: 14px; + } + + // 描述列表主体容器 + &__body { + width: 100%; + } + + // 描述列表行 + &__row { + display: flex; + width: 100%; + border-bottom: 1px solid $--border-color-lighter; + + // 最后一行移除底部边框 + &:last-child { + border-bottom: none; + } + } + + // 描述列表标签项(左侧) + .el-descriptions-item__label { + padding: $--spacing-lg; + background: $--color-background; // 极浅灰背景区分标签 + color: $--color-text-secondary; // 浅灰文字 + font-weight: 500; + border-right: 1px solid $--border-color-lighter; + box-sizing: border-box; + white-space: nowrap; + font-size: 13px; + } + + // 描述列表内容项(右侧) + &-item__content { + padding: $--spacing-lg; + background: $--color-background-light; + color: $--color-text-primary; // 白色文字 + flex: 1; + box-sizing: border-box; + font-size: 13px; + word-break: break-word; + } + + // 带边框模式适配 + &--border { + border: 1px solid $--border-color-light; + border-radius: 8px; + overflow: hidden; + + .el-descriptions__label, + .el-descriptions__content { + border-color: $--border-color-lighter; + } + + .el-descriptions__header { + border-bottom: 1px solid $--border-color-light; + } + } + + // 尺寸适配 + &--small { + + .el-descriptions__label, + .el-descriptions__content { + padding: calc($--spacing-base / 2) $--spacing-base; + font-size: 12px; + } + + .el-descriptions__header { + padding: calc($--spacing-base / 2) $--spacing-base; + font-size: 13px; + } + } + + &--large { + + .el-descriptions__label, + .el-descriptions__content { + padding: $--spacing-lg calc($--spacing-lg * 1.5); + font-size: 14px; + } + + .el-descriptions__header { + padding: $--spacing-base calc($--spacing-lg * 1.5); + font-size: 15px; + } + } + + // 响应式适配 + @media (max-width: 768px) { + .el-descriptions__row { + flex-direction: column; + } + + .el-descriptions__label { + border-right: none; + border-bottom: 1px solid $--border-color-lighter; + width: 100%; + } + } +} + // ---------------------- 3.6 导航类(面包屑/菜单)---------------------- // 面包屑 @@ -1094,7 +1487,7 @@ body { } // 折叠菜单 - &.el-menu--collapse > div > .el-submenu > .el-submenu__title .el-submenu__icon-arrow { + &.el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow { display: none; } @@ -1216,7 +1609,7 @@ div.pagination-container { background: rgba($--color-primary, .12); } - &.is-current > .el-tree-node__content { + &.is-current>.el-tree-node__content { background: rgba($--color-primary, .2); color: $--color-primary; } diff --git a/klp-ui/src/components/MarkdownPreview.vue b/klp-ui/src/components/MarkdownPreview.vue index ba32b8cd..51c73846 100644 --- a/klp-ui/src/components/MarkdownPreview.vue +++ b/klp-ui/src/components/MarkdownPreview.vue @@ -13,6 +13,12 @@ export default { default: '' } }, + data() { + return { + vditor: null, + loading: false + } + }, mounted() { this.renderMarkdown(); }, @@ -22,13 +28,17 @@ export default { } }, methods: { - renderMarkdown() { - Vditor.preview(this.$refs.preview, this.value || '', { + async renderMarkdown() { + this.loading = true; + await Vditor.preview(this.$refs.preview, this.value || '', { anchor: 1, hl: true, + theme: 'dark', math: { inlineDigit: true }, mermaid: true, }); + this.loading = false; + console.log(this.$refs.preview, p); } } } @@ -36,9 +46,9 @@ export default { diff --git a/klp-ui/src/store/modules/user.js b/klp-ui/src/store/modules/user.js index d67c9a4a..507f1845 100644 --- a/klp-ui/src/store/modules/user.js +++ b/klp-ui/src/store/modules/user.js @@ -51,7 +51,7 @@ const user = { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.data.user - const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar; + const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/avatar.png") : user.avatar; if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', res.data.roles) commit('SET_PERMISSIONS', res.data.permissions) diff --git a/klp-ui/src/views/components/AllApplications.vue b/klp-ui/src/views/components/AllApplications.vue index 22b57e2c..a4d8ecc9 100644 --- a/klp-ui/src/views/components/AllApplications.vue +++ b/klp-ui/src/views/components/AllApplications.vue @@ -207,7 +207,6 @@ export default { \ No newline at end of file diff --git a/klp-ui/src/views/finance/document/index.vue b/klp-ui/src/views/finance/document/index.vue index c088c234..a440be25 100644 --- a/klp-ui/src/views/finance/document/index.vue +++ b/klp-ui/src/views/finance/document/index.vue @@ -46,26 +46,6 @@ @click="handleAdd" >新增 - - 修改 - - - 删除 - .dashboard-root { min-height: 100vh; - background: linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%); padding: 32px; } @@ -88,7 +87,6 @@ export default { padding: 24px; border-radius: 16px; backdrop-filter: blur(4px); - background: rgba(255, 255, 255, 0.8); box-shadow: 0 4px 24px 0 rgba(0, 0, 0, 0.06); border: 1px solid rgba(255, 255, 255, 0.2); transition: transform 0.2s; @@ -158,7 +156,6 @@ export default { align-items: center; padding: 16px; border-radius: 12px; - background: #fff; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05); transition: all 0.2s; cursor: pointer; @@ -182,7 +179,6 @@ export default { .business-module-icon i { font-size: 20px; - color: #fff; } .bg-blue { @@ -229,7 +225,6 @@ export default { .monitor-records { padding: 24px; border-radius: 16px; - background: #fff; box-shadow: 0 4px 24px 0 rgba(0, 0, 0, 0.06); } @@ -279,7 +274,6 @@ export default { .monitor-record-icon-inner { font-size: 14px; - color: #fff; } .monitor-record-action { @@ -305,7 +299,6 @@ export default { border-radius: 50%; object-fit: cover; border: 2px solid #e0e0e0; - background: #fff; } .greeting-text { diff --git a/klp-ui/src/views/login.vue b/klp-ui/src/views/login.vue index bd3cf0b0..17b08ed0 100644 --- a/klp-ui/src/views/login.vue +++ b/klp-ui/src/views/login.vue @@ -153,10 +153,18 @@ export default { + \ No newline at end of file diff --git a/klp-ui/src/views/mes/qc/files/index.vue b/klp-ui/src/views/mes/qc/files/index.vue index f57bed7d..1318bee9 100644 --- a/klp-ui/src/views/mes/qc/files/index.vue +++ b/klp-ui/src/views/mes/qc/files/index.vue @@ -1,44 +1,84 @@ @@ -58,7 +98,7 @@ export default { }, created() { this.fetchFileList(); - getFileStats() + getFileStats(); // 补充括号,修复语法问题 }, computed: { groupedFiles() { @@ -79,6 +119,7 @@ export default { weekAgo.setDate(today.getDate() - 6); const monthStart = new Date(now.getFullYear(), now.getMonth(), 1); const threeMonthsAgo = new Date(now.getFullYear(), now.getMonth() - 2, 1); + (this.files || []).forEach(file => { const d = file.lastModified ? new Date(file.lastModified) : null; if (!d) { @@ -99,6 +140,7 @@ export default { groups['更久'].push(file); } }); + // 只返回有文件的分组 return Object.fromEntries(Object.entries(groups).filter(([k, v]) => v.length)); } @@ -111,10 +153,12 @@ export default { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', + confirmButtonClass: 'el-button--warning', + cancelButtonClass: 'el-button--text' }).then(async () => { const names = this.files.map(f => f.fileName); await this.batchDelete(names); - }).catch(() => {}); + }).catch(() => { }); }, // 清空某个分组 @@ -125,10 +169,12 @@ export default { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', + confirmButtonClass: 'el-button--warning', + cancelButtonClass: 'el-button--text' }).then(async () => { const names = group.map(f => f.fileName); await this.batchDelete(names); - }).catch(() => {}); + }).catch(() => { }); }, // 批量删除 @@ -154,6 +200,8 @@ export default { this.loadingList = false; } }, + + // 获取文件列表 async fetchFileList() { this.loadingList = true; this.files = []; @@ -168,6 +216,7 @@ export default { } }, + // 选择文件预览 async selectFile(file) { this.selectedFileName = file.fileName; this.selectedFile = null; @@ -175,26 +224,25 @@ export default { try { const isText = /\.(txt|md|json|js|ts|log|csv|xml|html|css)$/i.test(file.fileName); const isImage = /\.(png|jpe?g|gif|bmp|webp|svg)$/i.test(file.fileName); + if (isText) { - const textResult = await getFileContent(file.fileName) - this.selectedFile = {...textResult.data, fileType: 'text'}; - } + const textResult = await getFileContent(file.fileName); + this.selectedFile = { ...textResult.data, fileType: 'text' }; + } + // 图片预览逻辑(保留,需时启用) // else if (isImage) { - // // 图片文件 // let blob = null; // if (typeof this.$options.components?.getFileContent === 'function') { // blob = await this.$options.components.getFileContent(file.fileName); // } else if (typeof window.getFileContent === 'function') { // blob = await window.getFileContent(file.fileName); // } - // // blob 可能是base64字符串或Blob对象,需适配 // let imgUrl = ''; // if (blob instanceof Blob) { // imgUrl = URL.createObjectURL(blob); // } else if (typeof blob === 'string' && blob.startsWith('data:image')) { // imgUrl = blob; // } else if (typeof blob === 'string') { - // // 假设后端返回base64 // imgUrl = 'data:image/*;base64,' + blob; // } // this.selectedFile = { fileName: file.fileName, fileContent: imgUrl, fileType: 'image' }; @@ -206,11 +254,13 @@ export default { this.loadingContent = false; } }, + + // 单个文件删除 handleDeleteFile(file) { deleteFile(file.fileName) .then(() => { this.$message.success('文件删除成功'); - this.fetchFileList(); // 重新加载文件列表 + this.fetchFileList(); }) .catch(err => { this.$message.error('删除文件失败: ' + (err.message || '未知错误')); @@ -221,5 +271,291 @@ export default { +/* 全局容器 */ +.file-preview-container { + display: flex; + height: calc(100vh - 84px); + background: var(--color-background); + color: var(--color-text-regular); +} + +/* 左侧文件列表侧边栏 */ +.file-list-sidebar { + width: 250px; + border-right: 1px solid var(--border-color-light); + overflow-y: auto; + background: var(--color-background-light); +} + +/* 列表顶部操作栏 */ +.file-list-header { + padding: var(--spacing-base) var(--spacing-lg); + border-bottom: 1px solid var(--border-color-light); + display: flex; + gap: var(--spacing-base); + align-items: center; + background: var(--metal-gradient-light); +} + +/* 清空全部按钮 */ +.clear-all-btn { + background: linear-gradient(145deg, #e53e3e, #c53030); + color: #fff; + border: 1px solid #9b2c2c; + border-radius: 4px; + padding: 4px 10px; + cursor: pointer; + transition: all 0.2s; + box-shadow: var(--metal-shadow-inset); +} + +.clear-all-btn:hover { + box-shadow: var(--metal-shadow); + transform: translateY(-1px); +} + +.clear-all-btn:active { + box-shadow: var(--metal-shadow-inset); + transform: translateY(0); +} + +/* 列表加载状态 */ +.list-loading { + padding: 24px; + color: var(--color-text-secondary); + text-align: center; + background: var(--metal-gradient-light); +} + +/* 文件分组列表 */ +.file-group-list { + list-style: none; + padding: 0; + margin: 0; +} + +/* 分组标题栏 */ +.group-header { + background: var(--metal-gradient-dark); + color: var(--color-text-primary); + font-weight: 600; + padding: var(--spacing-base) var(--spacing-lg); + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid var(--border-color-lighter); +} + +/* 清空分组按钮 */ +.clear-group-btn { + background: linear-gradient(145deg, #e6a23c, #d48822); + color: #fff; + border: 1px solid #b87319; + border-radius: 3px; + padding: 2px 8px; + font-size: 12px; + cursor: pointer; + transition: all 0.2s; + box-shadow: var(--metal-shadow-inset); +} + +.clear-group-btn:hover { + box-shadow: var(--metal-shadow); + transform: translateY(-1px); +} + +.clear-group-btn:active { + box-shadow: var(--metal-shadow-inset); + transform: translateY(0); +} + +/* 文件项基础样式 */ +.file-item { + padding: 12px var(--spacing-lg); + cursor: pointer; + transition: all 0.2s; + background: var(--color-background-light); + border-left: 3px solid transparent; +} + +.file-item:hover { + background: var(--metal-gradient-light); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +/* 文件项选中状态 */ +.file-item--active { + background: rgba(var(--color-primary-rgb), 0.2); + border-left: 3px solid var(--color-primary); +} + +/* 文件项内容容器 */ +.file-item__content { + display: flex; + justify-content: space-between; + align-items: center; +} + +/* 文件名 */ +.file-name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 180px; +} + +/* 删除文件按钮 */ +.delete-file-btn { + color: var(--color-danger); + cursor: pointer; + padding: 2px 4px; + border-radius: 3px; + transition: all 0.2s; +} + +.delete-file-btn:hover { + background: rgba(var(--color-danger-rgb), 0.15); +} + +/* 右侧预览主区域 */ +.file-preview-main { + flex: 1; + padding: var(--spacing-lg); + overflow-y: auto; +} + +/* 内容加载状态 */ +.content-loading { + color: var(--color-text-secondary); + padding: 24px; + background: var(--metal-gradient-light); + border-radius: 6px; + border: 1px solid var(--border-color-light); +} + +/* 预览卡片容器 */ +.preview-card { + background: var(--metal-gradient-light); + border-radius: 6px; + border: 1px solid var(--border-color-light); + padding: var(--spacing-lg); + box-shadow: var(--metal-shadow); +} + +/* 预览标题 */ +.preview-title { + color: var(--color-text-primary); + margin-top: 0; + padding-bottom: var(--spacing-base); + border-bottom: 1px solid var(--border-color-lighter); +} + +/* 文本预览样式 */ +.text-preview { + background: var(--table-bg); + color: var(--color-text-regular); + padding: var(--spacing-lg); + border-radius: 4px; + min-height: 300px; + border: 1px solid var(--border-color-lighter); + overflow-x: auto; + font-size: 13px; + line-height: 1.5; + margin: 0; +} + +/* 图片预览容器(保留,需时启用) */ +/* .image-preview-container { + padding: var(--spacing-lg); + background: var(--table-bg); + border-radius: 4px; + min-height: 300px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid var(--border-color-lighter); +} + +.image-preview { + max-width: 100%; + max-height: 600px; + border-radius: 4px; + box-shadow: var(--metal-shadow); +} */ + +/* 不支持的文件类型样式 */ +.unsupported-type { + background: var(--table-bg); + padding: var(--spacing-lg); + border-radius: 4px; + min-height: 300px; + color: var(--color-warning); + border: 1px solid var(--border-color-lighter); + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; +} + +/* 未选择文件状态 */ +.no-selection { + color: var(--color-text-secondary); + padding: 24px; + background: var(--metal-gradient-light); + border-radius: 6px; + border: 1px solid var(--border-color-light); +} + +/* 滚动条样式优化 */ +::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +::-webkit-scrollbar-track { + background: var(--color-background-light); + border-radius: 3px; +} + +::-webkit-scrollbar-thumb { + background: var(--border-color-light); + border-radius: 3px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--border-color-base); +} + +/* 修复Element消息提示框样式(适配深色) */ +::v-deep .el-message { + background: var(--metal-gradient-light); + border-color: var(--border-color-light); + color: var(--color-text-regular); +} + +::v-deep .el-message__icon--success { + color: var(--color-success); +} + +::v-deep .el-message__icon--error { + color: var(--color-danger); +} + +::v-deep .el-message__icon--info { + color: var(--color-info); +} + +/* 修复确认对话框样式 */ +::v-deep .el-dialog { + background: var(--metal-gradient-light) !important; + border-color: var(--border-color-light) !important; +} + +::v-deep .el-dialog__title { + color: var(--color-text-primary) !important; +} + +::v-deep .el-dialog__body { + color: var(--color-text-regular) !important; +} + \ No newline at end of file diff --git a/klp-ui/src/views/wms/hotProduct/index.vue b/klp-ui/src/views/wms/hotProduct/index.vue index 5dc76ab7..6a0bca23 100644 --- a/klp-ui/src/views/wms/hotProduct/index.vue +++ b/klp-ui/src/views/wms/hotProduct/index.vue @@ -148,22 +148,6 @@ - - -
- - - 刷新数据 - - -
@@ -394,7 +378,6 @@ export default {