feat: 调整样式更紧凑

This commit is contained in:
砂糖
2025-09-18 16:22:49 +08:00
parent 5c6e2bfb3c
commit 6561eaf933
27 changed files with 1205 additions and 378 deletions

View File

@@ -1,100 +1,831 @@
// cover some element-ui styles // ====================== 1. 基础尺寸变量Sass直接处理======================
// 间距/尺寸变量
$--spacing-sm: 4px;
$--spacing-base: 8px;
$--spacing-md: $--spacing-base;
$--spacing-lg: $--spacing-base * 2;
$--form-item-margin: $--spacing-base;
$--btn-height: 24px;
.el-breadcrumb__inner,
.el-breadcrumb__inner a { // ====================== 2. CSS尺寸变量与Sass变量同步======================
font-weight: 400 !important; :root {
/* 间距/尺寸体系 */
--spacing-sm: #{$--spacing-sm};
--spacing-base: #{$--spacing-base};
--spacing-md: #{$--spacing-md};
--spacing-lg: #{$--spacing-lg};
--form-item-margin: #{$--form-item-margin};
--btn-height: #{$--btn-height};
} }
.el-upload {
input[type="file"] { // ====================== 3. Element UI适配 - 尺寸变量 =======================
display: none !important; // 尺寸变量
$--spacing-sm: $--spacing-sm !default;
$--spacing-base: $--spacing-base !default;
$--spacing-md: $--spacing-md !default;
$--spacing-lg: $--spacing-lg !default;
$--form-item-margin: $--form-item-margin !default;
$--btn-height: $--btn-height !default;
// ====================== 4. 全局尺寸样式 ======================
body {
font-size: 14px;
line-height: 1.5;
margin: 0;
padding: 0;
}
// 标签页内容溢出修复(尺寸相关)
.el-tabs__content {
overflow: visible !important;
}
// ====================== 5. 组件尺寸样式(按优先级合并)======================
// ---------------------- 5.1 按钮(紧凑尺寸)----------------------
@mixin button-variant() {
border-radius: 6px;
transition: all .25s ease;
height: $--btn-height;
padding: 0 var(--spacing-lg);
font-size: 13px;
&:hover,
&:focus {
transform: translateY(-1px);
}
&:active {
transform: translateY(1px);
}
&.is-disabled,
&[disabled] {
cursor: not-allowed;
} }
} }
.el-upload__input { // 主按钮(尺寸相关)
display: none; .el-button--primary {
@include button-variant();
} }
.cell { // 功能按钮(尺寸相关)
.el-tag { .el-button--success,
margin-right: 0px; .el-button--warning,
.el-button--danger,
.el-button--info {
@include button-variant();
}
// 文本按钮(尺寸相关)
.el-button--text {
height: auto;
padding: 4px 8px;
}
// 图标按钮(圆形紧凑尺寸)
.el-button.is-circle {
width: 26px;
height: 26px;
padding: 0;
border-radius: 50%;
&:only-child {
padding: 0;
} }
} }
.small-padding { // 按钮组(无缝衔接尺寸)
.cell { .el-button-group {
padding-left: 5px; .el-button {
padding-right: 5px; border-radius: 0;
} margin: 0;
}
.fixed-width { &:first-child {
.el-button--mini { border-radius: 6px 0 0 6px;
padding: 7px 10px; }
width: 60px;
}
}
.status-col { &:last-child {
.cell { border-radius: 0 6px 6px 0;
padding: 0 10px; }
text-align: center;
.el-tag { &:not(:last-child) {
margin-right: 0px; border-right: none;
} }
} }
} }
// to fixed https://github.com/ElemeFE/element/issues/2461 // 中号按钮(尺寸)
.el-button--medium {
padding: 4px 8px !important;
font-size: 12px;
height: $--btn-height - 4px;
}
// 迷你/小号按钮(超紧凑尺寸)
.el-button--mini,
.el-button--small,
.el-button {
padding: 4px 8px !important;
font-size: 12px;
height: $--btn-height - 4px;
&.is-circle {
padding: 4px !important;
}
}
// ---------------------- 5.2 表格(紧凑尺寸)----------------------
.el-table {
border-radius: 8px;
overflow: hidden;
margin-top: $--form-item-margin * 2; // 与表单间距
// 表头紧凑padding
.el-table__header-wrapper {
th.el-table__cell {
padding: 4px !important;
height: auto;
font-size: 13px;
}
}
.el-button + .el-button {
margin-left: 2px;
}
.el-button.el-button--text {
padding: 0 2px !important;
}
// 表体紧凑padding
.el-table__body-wrapper {
.el-table__cell {
padding: 2px 4px !important; // 超紧凑
font-size: 13px;
}
}
// 表尾紧凑padding
.el-table__footer-wrapper {
td {
padding: 4px !important;
}
}
// 适配尺寸类(统一紧凑)
&.el-table--medium .el-table__cell,
&.el-table--mini .el-table__cell {
padding: 0 !important;
}
}
.el-table__fixed-right {
// 表头紧凑padding
.el-table__fixed-header-wrapper {
th.el-table__cell {
padding: 4px !important;
font-size: 13px;
}
}
}
// 自定义表格工具类(补充紧凑)
.small-padding .cell {
padding-left: calc($--spacing-base / 2);
padding-right: calc($--spacing-base / 2);
}
.status-col .cell {
padding: 0 10px !important;
text-align: center;
}
// ---------------------- 5.3 日期范围选择器(尺寸适配)----------------------
.el-date-editor {
height: $--btn-height;
// 基础尺寸
&.el-range-editor {
padding: 0 8px;
height: $--btn-height;
// 图标尺寸
.el-input__icon {
width: 18px;
height: 18px;
line-height: 18px;
}
// 输入框尺寸
.el-range-input {
padding: 0 4px;
height: 100%;
font-size: 13px;
width: 80px;
}
// 分隔符尺寸
.el-range-separator {
padding: 0 4px;
font-size: 13px;
}
// 清除图标间距
.el-range__close-icon {
margin-left: 4px;
}
}
&--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;
}
}
// 日期选择面板尺寸
.el-picker-panel {
border-radius: 6px;
// 头部导航尺寸
.el-picker-panel__header {
padding: 6px 10px;
.el-picker-panel__icon-btn {
width: 24px;
height: 24px;
line-height: 24px;
border-radius: 4px;
}
}
// 日期表格尺寸
.el-date-table {
border-collapse: separate;
border-spacing: 2px;
th {
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;
}
}
}
// 范围选择器底部按钮尺寸
.el-range-picker__footer {
padding: 6px 10px;
button {
height: 24px;
line-height: 22px;
padding: 0 12px;
font-size: 12px;
border-radius: 4px;
}
}
}
// ---------------------- 5.4 表单/输入(统一尺寸)----------------------
// 表单项布局尺寸
.el-form-item {
margin-bottom: $--form-item-margin !important;
font-size: 13px;
// 标签间距
.el-form-item__label {
padding-right: $--spacing-base;
font-size: 13px;
}
// 搜索表单 inline 布局
&.search-form-item {
display: inline-block;
margin-right: $--spacing-base;
vertical-align: middle;
}
}
// 输入框(统一高度)
.el-input {
height: $--btn-height;
.el-input__inner {
border-radius: 0;
height: $--btn-height;
line-height: $--btn-height;
font-size: 13px;
}
// 输入框图标尺寸
.el-input__icon {
height: $--btn-height;
line-height: $--btn-height;
}
// 尺寸适配(统一高度)
&.el-input--small .el-input__inner,
&.el-input--medium .el-input__inner,
&.el-input--large .el-input__inner {
height: $--btn-height;
line-height: $--btn-height;
}
// 输入组尺寸
.el-input-group__append,
.el-input-group__prepend {
border-radius: 0;
font-size: 13px;
}
}
// 文本域尺寸
.el-textarea .el-textarea__inner {
border-radius: 0;
padding: $--spacing-base;
font-size: 13px;
}
// 数字输入框尺寸
.el-input-number {
.el-input__inner {
border-radius: 0;
}
// 增减按钮尺寸
.el-input-number__increase,
.el-input-number__decrease {
transition: all .2s ease;
height: $--btn-height;
line-height: $--btn-height;
}
.el-input-number__increase,
.el-input-number__decrease {
border-radius: 0;
}
// 迷你尺寸
&.el-input-number--small {
.el-input-number__increase,
.el-input-number__decrease {
width: 24px;
height: 24px;
}
}
// 无控制按钮尺寸
&.is-without-controls .el-input__inner {
border-radius: 0;
}
}
// 选择器/下拉框尺寸
.el-select {
.el-input__inner {
border-radius: 0;
}
// 下拉面板尺寸
.el-select-dropdown {
border-radius: 6px;
.el-select-dropdown__item {
padding: 6px 16px;
font-size: 13px;
}
}
}
// ---------------------- 5.5 卡片/对话框(尺寸层级)----------------------
// 卡片尺寸
.el-card {
border-radius: 8px;
overflow: hidden;
// 卡片头部尺寸
.el-card__header {
padding: $--spacing-md $--spacing-lg;
}
// 卡片主体尺寸
.el-card__body {
padding: $--spacing-lg;
}
}
// 对话框尺寸
.el-dialog { .el-dialog {
transform: none; transform: none;
left: 0; left: 0;
position: relative; position: relative;
margin: 0 auto; margin: 10vh auto 0;
border-radius: 8px;
width: 60% !important; // 自适应宽度
// 对话框头部尺寸
.el-dialog__header {
padding: $--spacing-lg;
}
// 对话框主体尺寸
.el-dialog__body {
padding: $--spacing-lg;
max-height: 60vh;
overflow-y: auto;
}
// 对话框底部尺寸
.el-dialog__footer {
padding: $--spacing-md $--spacing-lg;
text-align: right;
}
} }
// refine element ui upload // 抽屉尺寸
.upload-container { .el-drawer {
.el-upload { border-radius: 8px;
}
// Popover尺寸
.el-popover {
border-radius: 8px;
padding: $--spacing-lg;
// Popover 标题尺寸
.el-popover__title {
padding-bottom: $--spacing-md;
margin-bottom: $--spacing-md;
}
// Popover 底部尺寸
.el-popover__footer {
padding-top: $--spacing-md;
margin-top: $--spacing-md;
text-align: right;
}
}
.el-button-group+.el-popover {
margin-left: 5px;
}
// ---------------------- 5.6 标签页组件el-tabs尺寸 ----------------======
.el-tabs {
// 标签栏尺寸
.el-tabs__header {
margin: 0;
padding: 0;
// 标签导航容器尺寸
.el-tabs__nav {
height: 40px;
line-height: 40px;
padding: 0 var(--spacing-base);
}
// 标签项尺寸
.el-tabs__item {
height: 40px;
line-height: 40px;
font-size: 13px;
transition: all 0.2s ease;
}
// 标签滚动按钮尺寸
.el-tabs__nav-prev,
.el-tabs__nav-next {
width: 32px;
height: 32px;
line-height: 32px;
margin: 4px 0;
border-radius: 4px;
transition: all 0.2s ease;
}
}
// 标签内容区尺寸
.el-tabs__content {
padding: var(--spacing-lg);
border-radius: 0 0 6px 6px;
min-height: 100px; // 确保有基本高度
}
// 卡片类型标签页尺寸
&.el-tabs--card {
.el-tabs__header {
.el-tabs__nav {
border-radius: 6px;
overflow: hidden;
}
.el-tabs__item {
margin: 0 2px;
border-radius: 6px 6px 0 0;
}
}
.el-tabs__content {
border-radius: 0 6px 6px 6px;
margin-top: -1px;
}
}
// 左侧/右侧标签页尺寸
&.el-tabs--left,
&.el-tabs--right {
.el-tabs__header {
margin: 0 var(--spacing-lg) 0 0;
.el-tabs__nav {
flex-direction: column;
height: auto;
}
.el-tabs__item {
width: 100%;
}
}
&.el-tabs--right {
.el-tabs__header {
margin: 0 0 0 var(--spacing-lg);
}
}
.el-tabs__content {
border-radius: 6px;
}
}
// 标签页关闭按钮间距
.el-icon-close {
margin-left: var(--spacing-sm);
transition: all 0.2s ease;
}
// 可编辑标签添加按钮间距
.el-tabs__new-tab {
margin: 0 var(--spacing-sm);
transition: all 0.2s ease;
}
}
// ---------------------- 5.7 日期选择器(尺寸优化)----------------------
.el-date-picker {
.el-picker-panel {
border-radius: 8px;
// 头部尺寸
.el-date-picker__header {
padding: $--spacing-md;
}
// 日期表格尺寸
.el-date-table {
th {
padding: $--spacing-sm;
}
td {
padding: $--spacing-sm;
border-radius: 4px;
transition: all .2s;
}
}
// 快捷选项尺寸
.el-picker-panel__shortcut {
padding: $--spacing-md;
.el-picker-panel__shortcut-btn {
padding: 4px 10px;
border-radius: 4px;
transition: all .2s;
}
}
}
// 范围选择器分隔符尺寸
.el-range-separator {
padding: 0 $--spacing-md;
box-sizing: content-box;
}
// 范围输入框布局
.el-range-editor.el-input__inner {
display: inline-flex !important;
}
}
// ---------------------- 5.8 描述列表组件el-descriptions- 尺寸适配 ======================
.el-descriptions {
width: 100%;
overflow: hidden;
// 描述列表头部尺寸
&__header {
padding: $--spacing-base $--spacing-lg;
font-size: 14px;
}
// 描述列表主体容器尺寸
&__body {
width: 100%;
}
// 描述列表行布局
&__row {
display: flex;
width: 100%; width: 100%;
.el-upload-dragger { // 最后一行布局
&:last-child {
border-bottom: none;
}
}
// 描述列表标签项尺寸
.el-descriptions-item__label {
padding: $--spacing-lg;
box-sizing: border-box;
white-space: nowrap;
font-size: 13px;
}
// 描述列表内容项尺寸
&-item__content {
padding: $--spacing-lg;
flex: 1;
box-sizing: border-box;
font-size: 13px;
word-break: break-word;
}
// 带边框模式尺寸
&--border {
border-radius: 8px;
overflow: hidden;
}
// 尺寸适配
&--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 $--spacing-lg * 1.5;
font-size: 14px;
}
.el-descriptions__header {
padding: $--spacing-base $--spacing-lg * 1.5;
font-size: 15px;
}
}
// 响应式适配
@media (max-width: 768px) {
.el-descriptions__row {
flex-direction: column;
}
.el-descriptions__label {
width: 100%; width: 100%;
height: 200px;
} }
} }
} }
// dropdown // 菜单尺寸
.el-dropdown-menu { .el-menu {
a { .el-menu-item,
display: block .el-submenu__title {
height: 40px !important;
line-height: 40px !important;
}
// 折叠菜单布局
&.el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow {
display: none;
} }
} }
// fix date-picker ui bug in filter-item
.el-range-editor.el-input__inner { // ---------------------- 5.10 其他组件(标签/分页/上传)尺寸 ----------------------
display: inline-flex !important; // 标签尺寸
.el-tag {
padding: 2px 8px;
border-radius: 2px;
font-size: 12px;
height: auto;
margin-right: 0;
// 表格内标签尺寸
.cell & {
margin-right: 0;
padding: 1px !important;
border-radius: 0 !important;
}
} }
// to fix el-date-picker css style // 分页尺寸
.el-range-separator { .el-pagination {
box-sizing: content-box; margin-top: 16px;
padding: 8px 0;
text-align: right;
.el-pager li {
margin: 0 2px;
min-width: 30px;
height: 30px;
line-height: 30px;
border-radius: 4px;
}
// 输入框后缀布局
.el-input__suffix {
position: absolute;
line-height: 0;
}
} }
.el-menu--collapse // 分页容器尺寸
> div div.pagination-container {
> .el-submenu padding: 0 !important;
> .el-submenu__title margin-top: 0 !important;
.el-submenu__icon-arrow { margin-bottom: 0 !important;
display: none;
.el-pagination {
padding: 0 !important;
}
} }
.el-dropdown .el-dropdown-link{ // 上传组件尺寸
color: var(--el-color-primary) !important; .el-upload {
input[type="file"] {
display: none !important;
}
.el-upload__input {
display: none;
}
// 拖拽上传容器尺寸
.el-upload-dragger {
width: 100%;
height: 200px;
border-radius: 6px;
}
} }
.el-select-dropdown { // 树形组件布局
z-index: 9999 !important; /* 需大于全屏容器的z-index */ .el-tree {
.el-tree-node {
&.is-current>.el-tree-node__content {
width: 100%;
}
}
} }

View File

@@ -5,52 +5,52 @@
/** 基础通用 **/ /** 基础通用 **/
.pt5 { .pt5 {
padding-top: 5px; padding-top: 2px;
} }
.pr5 { .pr5 {
padding-right: 5px; padding-right: 2px;
} }
.pb5 { .pb5 {
padding-bottom: 5px; padding-bottom: 2px;
} }
.mt5 { .mt5 {
margin-top: 5px; margin-top: 2px;
} }
.mr5 { .mr5 {
margin-right: 5px; margin-right: 2px;
} }
.mb5 { .mb5 {
margin-bottom: 5px; margin-bottom: 2px;
} }
.mb8 { .mb8 {
margin-bottom: 8px; margin-bottom: 4px;
} }
.ml5 { .ml5 {
margin-left: 5px; margin-left: 2px;
} }
.mt10 { .mt10 {
margin-top: 10px; margin-top: 5px;
} }
.mr10 { .mr10 {
margin-right: 10px; margin-right: 5px;
} }
.mb10 { .mb10 {
margin-bottom: 10px; margin-bottom: 5px;
} }
.ml10 { .ml10 {
margin-left: 10px; margin-left: 5px;
} }
.mt20 { .mt20 {
margin-top: 20px; margin-top: 10px;
} }
.mr20 { .mr20 {
margin-right: 20px; margin-right: 10px;
} }
.mb20 { .mb20 {
margin-bottom: 20px; margin-bottom: 10px;
} }
.ml20 { .ml20 {
margin-left: 20px; margin-left: 10px;
} }
.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {

View File

@@ -96,18 +96,21 @@
</div> </div>
<div class="module-actions"> <div class="module-actions">
<el-button <el-button
size="mini"
@click="moveModule(index, 'up')" @click="moveModule(index, 'up')"
:disabled="index === 0" :disabled="index === 0"
icon="ArrowUp" icon="ArrowUp"
type="primary" type="primary"
/> />
<el-button <el-button
size="mini"
@click="moveModule(index, 'down')" @click="moveModule(index, 'down')"
:disabled="index === businessModules.length - 1" :disabled="index === businessModules.length - 1"
icon="ArrowDown" icon="ArrowDown"
type="primary" type="primary"
/> />
<el-button <el-button
size="mini"
@click="deleteModule(index)" @click="deleteModule(index)"
icon="Delete" icon="Delete"
danger danger
@@ -261,11 +264,11 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
/* 外层容器统一样式:亮色背景(默认) */ /* 外层容器统一样式:亮色背景(默认)+ 紧凑化调整 */
.applications-wrapper { .applications-wrapper {
padding: 20px; padding: 16px; /* 整体内边距从20px减至16px */
/* 亮色主题变量 */ /* 亮色主题变量(保持原配色,仅调整尺寸相关) */
--color-text-primary: #111827; --color-text-primary: #111827;
--color-text-secondary: #4b5563; --color-text-secondary: #4b5563;
--color-text-tertiary: #6b7280; --color-text-tertiary: #6b7280;
@@ -278,13 +281,13 @@ export default {
--color-border-primary: #dee2e6; --color-border-primary: #dee2e6;
--shadow-card: 0 2px 12px 0 rgba(0, 0, 0, 0.08); --shadow-card: 0 2px 8px 0 rgba(0, 0, 0, 0.06); /* 弱化阴影,适配紧凑布局 */
--shadow-card-hover: 0 4px 16px 0 rgba(0, 0, 0, 0.12); --shadow-card-hover: 0 3px 12px 0 rgba(0, 0, 0, 0.08);
--shadow-app-item: 0 2px 4px rgba(0, 0, 0, 0.08); --shadow-app-item: 0 1px 3px rgba(0, 0, 0, 0.06);
/* 一、常用应用区域样式 */ /* 一、常用应用区域:核心紧凑化 */
.business-area { .business-area {
margin-bottom: 32px; margin-bottom: 24px; /* 底部间距从32px减至24px */
} }
/* 常用应用标题栏 */ /* 常用应用标题栏 */
@@ -292,11 +295,11 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 16px; margin-bottom: 12px; /* 标题与列表间距从16px减至12px */
} }
.business-area-title { .business-area-title {
font-size: 18px; font-size: 16px; /* 标题字体从18px减至16px */
font-weight: 600; font-weight: 600;
color: var(--color-text-primary); color: var(--color-text-primary);
margin: 0; margin: 0;
@@ -305,34 +308,38 @@ export default {
.edit-btn { .edit-btn {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 6px; gap: 4px; /* 图标与文字间距从6px减至4px */
padding: 6px 12px; padding: 4px 10px; /* 按钮内边距从6px12px减至4px10px */
background: var(--color-bg-primary); background: var(--color-bg-primary);
border: none; border: none;
border-radius: 6px; border-radius: 4px; /* 圆角从6px减至4px */
color: var(--color-text-primary); color: var(--color-text-primary);
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 13px; /* 按钮字体从14px减至13px */
transition: all 0.2s; transition: all 0.2s;
&:hover { &:hover {
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
color: var(--color-text-primary); color: var(--color-text-primary);
} }
:deep(svg) {
font-size: 14px; /* 按钮图标缩小 */
}
} }
/* 常用应用列表 */ /* 常用应用列表:网格密度提升 */
.business-modules { .business-modules {
display: grid; display: grid;
grid-template-columns: repeat(6, 1fr); grid-template-columns: repeat(6, 1fr); /* 保持6列通过gap压缩空间 */
gap: 24px; gap: 16px; /* 卡片间距从24px减至16px */
} }
.business-module { .business-module {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 16px; padding: 12px; /* 卡片内边距从16px减至12px */
border-radius: 12px; border-radius: 8px; /* 圆角从12px减至8px */
background: var(--color-bg-card); background: var(--color-bg-card);
box-shadow: var(--shadow-card); box-shadow: var(--shadow-card);
transition: all 0.2s; transition: all 0.2s;
@@ -340,111 +347,113 @@ export default {
&:hover { &:hover {
box-shadow: var(--shadow-card-hover); box-shadow: var(--shadow-card-hover);
transform: translateY(-2px); transform: translateY(-1px); /* hover上移从2px减至1px更克制 */
background: var(--color-bg-secondary); background: var(--color-bg-secondary);
} }
} }
.business-module-icon { .business-module-icon {
width: 40px; width: 32px; /* 图标容器从40px减至32px */
height: 40px; height: 32px;
border-radius: 8px; border-radius: 6px; /* 圆角从8px减至6px */
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex-shrink: 0; flex-shrink: 0;
margin-right: 12px; margin-right: 8px; /* 图标与标题间距从12px减至8px */
background: var(--color-bg-icon); background: var(--color-bg-icon);
:deep(svg) { :deep(svg) {
font-size: 20px; font-size: 18px; /* 图标字体从20px减至18px */
color: var(--color-text-primary); color: var(--color-text-primary);
} }
} }
.business-module-title { .business-module-title {
font-size: 16px; font-size: 14px; /* 标题字体从16px减至14px */
font-weight: 500; font-weight: 500;
color: var(--color-text-primary); color: var(--color-text-primary);
margin: 0; margin: 0;
line-height: 1.3; /* 行高压缩,避免换行 */
} }
/* 二、全部应用区域样式 */ /* 二、全部应用区域:密度优化 */
.all-applications-container { .all-applications-container {
padding: 20px; padding: 12px; /* 容器内边距从20px减至12px */
border-radius: 8px; border-radius: 6px; /* 圆角从8px减至6px */
background: var(--color-bg-card); background: var(--color-bg-card);
} }
.title { .title {
font-size: 18px; font-size: 16px; /* 标题字体从18px减至16px */
font-weight: 600; font-weight: 600;
margin-bottom: 16px; margin-bottom: 12px; /* 标题与tabs间距从16px减至12px */
color: var(--color-text-primary); color: var(--color-text-primary);
} }
/* 应用列表网格 */ /* 应用列表网格:缩小间距 */
.app-grid { .app-grid {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 16px; gap: 12px; /* 卡片间距从16px减至12px */
padding-top: 10px; padding-top: 6px; /* 顶部内边距从10px减至6px */
margin: 10px 0; margin: 8px 0; /* 上下外边距从10px减至8px */
} }
/* 应用卡片 */ /* 应用卡片:压缩尺寸+紧凑布局 */
.app-item { .app-item {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
border-radius: 8px; border-radius: 6px; /* 圆角从8px减至6px */
padding: 20px; padding: 12px; /* 内边距从20px减至12px */
width: 160px; width: 140px; /* 卡片宽度从160px减至140px */
transition: all 0.3s ease; transition: all 0.2s ease; /* 缩短过渡时间 */
background-color: var(--color-bg-primary); background-color: var(--color-bg-primary);
box-shadow: var(--shadow-app-item); box-shadow: var(--shadow-app-item);
position: relative; position: relative;
&:hover { &:hover {
box-shadow: var(--shadow-card-hover); box-shadow: var(--shadow-card-hover);
transform: translateY(-2px); transform: translateY(-1px); /* 上移从2px减至1px */
background-color: var(--color-bg-secondary); background-color: var(--color-bg-secondary);
} }
} }
/* 应用图标容器 */ /* 应用图标容器:缩小尺寸 */
.app-icon-wrapper { .app-icon-wrapper {
width: 40px; width: 32px; /* 图标容器从40px减至32px */
height: 40px; height: 32px;
border-radius: 8px; border-radius: 6px; /* 圆角从8px减至6px */
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-right: 12px; margin-right: 8px; /* 图标与文字间距从12px减至8px */
background-color: var(--color-bg-icon); background-color: var(--color-bg-icon);
transition: background-color 0.3s ease; transition: background-color 0.2s ease;
} }
.app-icon { .app-icon {
font-size: 24px; font-size: 20px; /* 图标字体从24px减至20px */
color: var(--color-text-primary); color: var(--color-text-primary);
} }
/* 应用名称 */ /* 应用名称:缩小字体 */
.app-name { .app-name {
font-size: 14px; font-size: 13px; /* 字体从14px减至13px */
color: var(--color-text-primary); color: var(--color-text-primary);
flex: 1; flex: 1;
line-height: 1.2; /* 行高压缩 */
} }
/* 三点菜单 */ /* 三点菜单:紧凑定位 */
.app-actions { .app-actions {
position: absolute; position: absolute;
top: 8px; top: 6px; /* 上定位从8px减至6px */
right: 8px; right: 6px; /* 右定位从8px减至6px */
opacity: 0; opacity: 0;
transition: opacity 0.3s ease; transition: opacity 0.2s ease;
} }
.app-item:hover .app-actions { .app-item:hover .app-actions {
@@ -454,15 +463,19 @@ export default {
.actions-icon { .actions-icon {
cursor: pointer; cursor: pointer;
display: inline-block; display: inline-block;
width: 16px; width: 14px; /* 图标容器从16px减至14px */
height: 16px; height: 14px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: var(--color-text-primary); color: var(--color-text-primary);
:deep(svg) {
font-size: 12px; /* 三点图标缩小 */
}
} }
/* 三、设置弹窗样式 */ /* 三、设置弹窗:整体压缩 */
.dialog-mask { .dialog-mask {
position: fixed; position: fixed;
top: 0; top: 0;
@@ -477,13 +490,13 @@ export default {
} }
.setting-dialog { .setting-dialog {
width: 500px; width: 450px; /* 弹窗宽度从500px减至450px */
border-radius: 12px; border-radius: 8px; /* 圆角从12px减至8px */
background: var(--color-bg-card); background: var(--color-bg-card);
} }
.dialog-header { .dialog-header {
padding: 16px 24px; padding: 12px 20px; /* 内边距从16px24px减至12px20px */
border-bottom: 1px solid var(--color-border-primary); border-bottom: 1px solid var(--color-border-primary);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -492,7 +505,7 @@ export default {
.dialog-header h3 { .dialog-header h3 {
margin: 0; margin: 0;
font-size: 18px; font-size: 16px; /* 标题字体从18px减至16px */
color: var(--color-text-primary); color: var(--color-text-primary);
} }
@@ -501,31 +514,35 @@ export default {
border: none; border: none;
cursor: pointer; cursor: pointer;
color: var(--color-text-tertiary); color: var(--color-text-tertiary);
font-size: 18px; font-size: 16px; /* 关闭图标从18px减至16px */
&:hover { &:hover {
color: var(--color-text-primary); color: var(--color-text-primary);
} }
:deep(svg) {
font-size: 16px;
}
} }
.dialog-content { .dialog-content {
padding: 24px; padding: 16px; /* 内边距从24px减至16px */
max-height: 400px; max-height: 360px; /* 最大高度从400px减至360px */
overflow-y: auto; overflow-y: auto;
background: var(--color-bg-primary); background: var(--color-bg-primary);
} }
/* 空状态提示 */ /* 空状态提示:压缩 padding */
.empty-tip { .empty-tip {
text-align: center; text-align: center;
padding: 40px 0; padding: 30px 0; /* 内边距从40px减至30px */
color: var(--color-text-tertiary); color: var(--color-text-tertiary);
font-size: 14px; font-size: 13px; /* 字体从14px减至13px */
background: var(--color-bg-tertiary); background: var(--color-bg-tertiary);
border-radius: 8px; border-radius: 6px; /* 圆角从8px减至6px */
} }
/* 常用应用编辑列表 */ /* 常用应用编辑列表:缩小行高 */
.module-list { .module-list {
list-style: none; list-style: none;
padding: 0; padding: 0;
@@ -536,7 +553,7 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 12px 0; padding: 10px 0; /* 行内边距从12px减至10px */
border-bottom: 1px solid var(--color-border-primary); border-bottom: 1px solid var(--color-border-primary);
&:last-child { &:last-child {
@@ -547,45 +564,45 @@ export default {
.module-info { .module-info {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 8px; /* 序号与名称间距从12px减至8px */
} }
.module-index { .module-index {
width: 24px; width: 20px; /* 序号容器从24px减至20px */
height: 24px; height: 20px;
border-radius: 50%; border-radius: 50%;
background: var(--color-bg-tertiary); background: var(--color-bg-tertiary);
color: var(--color-text-secondary); color: var(--color-text-secondary);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-size: 12px; font-size: 11px; /* 序号字体从12px减至11px */
} }
.module-name { .module-name {
font-size: 16px; font-size: 14px; /* 名称字体从16px减至14px */
color: var(--color-text-primary); color: var(--color-text-primary);
} }
.module-actions { .module-actions {
display: flex; display: flex;
gap: 8px; gap: 6px; /* 按钮间距从8px减至6px */
} }
/* 弹窗底部按钮 */ /* 弹窗底部按钮:紧凑化 */
.dialog-footer { .dialog-footer {
padding: 16px 24px; padding: 12px 20px; /* 内边距从16px24px减至12px20px */
border-top: 1px solid var(--color-border-primary); border-top: 1px solid var(--color-border-primary);
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: 12px; gap: 8px; /* 按钮间距从12px减至8px */
} }
.cancel-btn, .confirm-btn { .cancel-btn, .confirm-btn {
padding: 8px 16px; padding: 6px 12px; /* 按钮内边距从8px16px减至6px12px */
border-radius: 6px; border-radius: 4px; /* 圆角从6px减至4px */
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 13px; /* 字体从14px减至13px */
transition: all 0.2s; transition: all 0.2s;
border: none; border: none;
} }
@@ -609,9 +626,9 @@ export default {
} }
} }
/* 四、Element组件样式穿透调整 */ /* 四、Element组件样式穿透:适配紧凑布局 */
:deep(.el-tabs__header) { :deep(.el-tabs__header) {
margin-bottom: 12px; margin-bottom: 8px; /* tabs与内容间距从12px减至8px */
} }
:deep(.el-tabs__nav-wrap::after) { :deep(.el-tabs__nav-wrap::after) {
@@ -620,8 +637,10 @@ export default {
} }
:deep(.el-tabs__item) { :deep(.el-tabs__item) {
font-size: 15px; font-size: 14px; /* 标签字体从15px减至14px */
color: var(--color-text-tertiary); padding: 0 12px; /* 标签内边距优化 */
height: 32px; /* 标签高度压缩 */
line-height: 32px;
} }
:deep(.el-tabs__item.is-active) { :deep(.el-tabs__item.is-active) {
@@ -629,15 +648,16 @@ export default {
} }
:deep(.el-dropdown-menu) { :deep(.el-dropdown-menu) {
min-width: 120px; min-width: 110px; /* 下拉菜单宽度从120px减至110px */
background-color: var(--color-bg-card); background-color: var(--color-bg-card);
border: 1px solid var(--color-border-primary); border: 1px solid var(--color-border-primary);
border-radius: 4px; /* 圆角从默认减至4px */
} }
:deep(.el-dropdown-item) { :deep(.el-dropdown-item) {
padding: 6px 16px; padding: 4px 12px; /* 菜单项内边距从6px16px减至4px12px */
font-size: 14px; font-size: 13px; /* 字体从14px减至13px */
color: var(--color-text-secondary); line-height: 1.4;
&:hover { &:hover {
background-color: var(--color-bg-secondary); background-color: var(--color-bg-secondary);
@@ -645,19 +665,27 @@ export default {
} }
:deep(.el-button) { :deep(.el-button) {
padding: 6px 12px; padding: 4px 8px; /* 按钮内边距从6px12px减至4px8px */
color: var(--color-text-secondary); color: var(--color-text-secondary);
background-color: var(--color-bg-tertiary); background-color: var(--color-bg-tertiary);
border: none; border: none;
font-size: 13px; /* 字体从14px减至13px */
border-radius: 4px;
&:hover { &:hover {
background-color: var(--color-bg-secondary); background-color: var(--color-bg-secondary);
} }
} }
/* 迷你按钮额外压缩 */
:deep(.el-button--mini) {
padding: 2px 6px;
font-size: 12px;
}
} }
/* 暗色模式:保持配色同步,继承紧凑尺寸样式 */
.applications-wrapper.dark { .applications-wrapper.dark {
/* 暗色主题变量 */
--color-text-primary: #e5e7eb; --color-text-primary: #e5e7eb;
--color-text-secondary: #e5e7eb; --color-text-secondary: #e5e7eb;
--color-text-tertiary: #9ca3af; --color-text-tertiary: #9ca3af;
@@ -670,9 +698,8 @@ export default {
--color-border-primary: #3a3a4a; --color-border-primary: #3a3a4a;
--shadow-card: 0 2px 12px 0 rgba(0, 0, 0, 0.3); --shadow-card: 0 2px 8px 0 rgba(0, 0, 0, 0.3);
--shadow-card-hover: 0 4px 16px 0 rgba(0, 0, 0, 0.4); --shadow-card-hover: 0 3px 12px 0 rgba(0, 0, 0, 0.4);
--shadow-app-item: 0 2px 4px rgba(0, 0, 0, 0.3); --shadow-app-item: 0 1px 3px rgba(0, 0, 0, 0.3);
} }
</style> </style>

View File

@@ -116,9 +116,9 @@
<CrontabResult :ex="crontabValueString"></CrontabResult> <CrontabResult :ex="crontabValueString"></CrontabResult>
<div class="pop_btn"> <div class="pop_btn">
<el-button type="primary" @click="submitFill">确定</el-button> <el-button size="mini" type="primary" @click="submitFill">确定</el-button>
<el-button type="warning" @click="clearCron">重置</el-button> <el-button size="mini" type="warning" @click="clearCron">重置</el-button>
<el-button @click="hidePopup">取消</el-button> <el-button size="mini" @click="hidePopup">取消</el-button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -24,11 +24,11 @@ const props = defineProps({
}, },
width: { width: {
type: [Number, String], type: [Number, String],
default: "50px" default: "30px"
}, },
height: { height: {
type: [Number, String], type: [Number, String],
default: "50px" default: "30px"
} }
}) })

View File

@@ -3,19 +3,20 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="mini"
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
size="small"
@click="handleAdd" @click="handleAdd"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="mini"
type="success" type="success"
plain plain
icon="Edit" icon="Edit"
size="small"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
>修改</el-button> >修改</el-button>

View File

@@ -10,7 +10,7 @@
value-key="productId" value-key="productId"
> >
<template #empty> <template #empty>
<el-button v-if="canAdd" @click="add" icon="Plus">未搜索到产品点击添加</el-button> <el-button size="mini" v-if="canAdd" @click="add" icon="Plus">未搜索到产品点击添加</el-button>
<div v-else style="padding: 10px;">未搜索到产品</div> <div v-else style="padding: 10px;">未搜索到产品</div>
</template> </template>
<el-option <el-option
@@ -70,8 +70,8 @@
</el-form> </el-form>
<template v-if="activeStep === 0" #footer> <template v-if="activeStep === 0" #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">创建产品</el-button> <el-button size="mini" :loading="buttonLoading" type="primary" @click="submitForm">创建产品</el-button>
<el-button @click="cancel"> </el-button> <el-button size="mini" @click="cancel"> </el-button>
</div> </div>
</template> </template>

View File

@@ -2,15 +2,15 @@
<div class="top-right-btn" :style="style"> <div class="top-right-btn" :style="style">
<el-row> <el-row>
<el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search"> <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search">
<el-button circle icon="Search" @click="toggleSearch()" /> <el-button size="small" circle icon="Search" @click="toggleSearch()" />
</el-tooltip> </el-tooltip>
<el-tooltip class="item" effect="dark" content="刷新" placement="top"> <el-tooltip class="item" effect="dark" content="刷新" placement="top">
<el-button circle icon="Refresh" @click="refresh()" /> <el-button size="small" circle icon="Refresh" @click="refresh()" />
</el-tooltip> </el-tooltip>
<el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns"> <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns">
<el-button circle icon="Menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/> <el-button size="small" circle icon="Menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/>
<el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'"> <el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'">
<el-button circle icon="Menu" /> <el-button size="small" circle icon="Menu" />
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<!-- 全选/反选 按钮 --> <!-- 全选/反选 按钮 -->

View File

@@ -46,7 +46,7 @@ export default {
}, },
size: { size: {
type: String, type: String,
default: 'mini' default: 'small'
}, },
showTop: { showTop: {
type: Boolean, type: Boolean,

View File

@@ -1,17 +1,19 @@
<template> <template>
<div class="dashboard-cards"> <div class="dashboard-cards">
<!-- 循环渲染4个统计卡片通过index控制特殊样式第三张无数值第四张无图表 -->
<el-card v-for="(card, index) in dataCards" :key="index" class="stats-card"> <el-card v-for="(card, index) in dataCards" :key="index" class="stats-card">
<div class="card-header"> <div class="card-header">
<div class="card-info"> <div class="card-info">
<h3 class="card-title">{{ card.title }}</h3> <h3 class="card-title">{{ card.title }}</h3>
<!-- 第三卡片不显示value --> <!-- 第三卡片库存排行不显示数值用v-if控制显隐 -->
<p class="card-value">{{ card.value }}</p> <p class="card-value" v-if="index !== 2">{{ card.value }}</p>
</div> </div>
<!-- 右侧图标通过动态组件渲染颜色绑定卡片配置 -->
<el-icon class="card-icon" :style="{ color: card.color }"> <el-icon class="card-icon" :style="{ color: card.color }">
<component :is="card.icon" /> <component :is="card.icon" />
</el-icon> </el-icon>
</div> </div>
<!-- 第四卡片不显示图表 --> <!-- 第四卡片系统状态不显示图表用v-if控制显隐 -->
<div class="chart-container" v-if="index !== 3"> <div class="chart-container" v-if="index !== 3">
<div :ref="el => chartRefs[index] = el" class="chart"></div> <div :ref="el => chartRefs[index] = el" class="chart"></div>
</div> </div>
@@ -20,185 +22,226 @@
</template> </template>
<script setup> <script setup>
// 1. 导入依赖图标、接口、echarts、Vue工具函数
import { ShoppingCart, Box, List, Monitor } from '@element-plus/icons-vue'; import { ShoppingCart, Box, List, Monitor } from '@element-plus/icons-vue';
import { overview } from '@/api/oa/dashboard'; import { overview } from '@/api/oa/dashboard';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { ref, onMounted, nextTick } from 'vue'; import { ref, onMounted, nextTick } from 'vue';
// 2. 图表颜色生成函数:支持透明度,适配折线图区域填充
const getColor = (index, alpha = 1) => { const getColor = (index, alpha = 1) => {
const colors = [ const colors = [
`rgba(59, 130, 246, ${alpha})`, `rgba(59, 130, 246, ${alpha})`, // 蓝色(订单总量)
`rgba(34, 197, 94, ${alpha})`, `rgba(245, 158, 11, ${alpha})`, // 黄色(薪资成本)
`rgba(234, 179, 8, ${alpha})`, `rgba(34, 197, 94, ${alpha})`, // 绿色(库存排行)
`rgba(168, 85, 247, ${alpha})` `rgba(168, 85, 247, ${alpha})` // 紫色(系统状态)
]; ];
return colors[index % colors.length]; return colors[index % colors.length];
}; };
// 3. 初始化图表函数仅处理前3张有图表的卡片避免空引用
const initCharts = () => { const initCharts = () => {
nextTick(() => { nextTick(() => {
// 只初始化前3个卡片的图表
dataCards.value.slice(0, 3).forEach((card, index) => { dataCards.value.slice(0, 3).forEach((card, index) => {
const chart = echarts.init(chartRefs.value[index]); const chartDom = chartRefs.value[index];
// 判断是否为第三个图表index=2使用柱状图配置 if (!chartDom) return; // 防止DOM未渲染导致报错
const isBarChart = index === 2;
const chart = echarts.init(chartDom);
const isBarChart = index === 2; // 第三张用柱状图,其余用折线图
// 图表配置:紧凑化优化(隐藏坐标轴、压缩网格、调整柱子宽度)
const option = { const option = {
animation: false, animation: false, // 关闭动画提升性能
grid: { grid: { left: 0, right: 0, top: 0, bottom: 0 }, // 占满容器
left: 0, xAxis: { type: 'category', show: false }, // 隐藏X轴
right: 0, yAxis: { type: 'value', show: false }, // 隐藏Y轴
top: 0,
bottom: 0
},
xAxis: {
type: 'category',
show: false
},
yAxis: {
type: 'value',
show: false
},
series: [{ series: [{
data: card.chartData, data: card.chartData,
type: isBarChart ? 'bar' : 'line', // 第三个图表用柱状图,其他用折线图 type: isBarChart ? 'bar' : 'line',
smooth: !isBarChart, // 柱状图不需要平滑效果 smooth: !isBarChart, // 折线图平滑,柱状图不需要
showSymbol: false, showSymbol: false, // 隐藏数据点
lineStyle: !isBarChart ? { // 折线图样式(柱状图不需要) // 折线图样式:细线更紧凑
color: getColor(index) lineStyle: !isBarChart ? { color: getColor(index), width: 1.5 } : undefined,
} : undefined, // 柱状图样式:调整宽度+小圆角
// 柱状图颜色配置 itemStyle: isBarChart ? { color: getColor(index), borderRadius: 2 } : undefined,
itemStyle: isBarChart ? { barWidth: isBarChart ? '65%' : undefined, // 柱子占比65%,减少间距
color: getColor(index) // 折线图区域填充:增强视觉不占空间
} : undefined,
// 折线图区域填充(柱状图不需要)
areaStyle: !isBarChart ? { areaStyle: !isBarChart ? {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
offset: 0, { offset: 0, color: getColor(index, 0.2) },
color: getColor(index, 0.2) { offset: 1, color: getColor(index, 0.05) }
}, { ])
offset: 1,
color: getColor(index, 0.1)
}])
} : undefined } : undefined
}] }]
}; };
chart.setOption(option); chart.setOption(option);
// 监听窗口resize确保图表自适应
window.addEventListener('resize', () => chart.resize());
}); });
}); });
}; };
// 4. 卡片数据初始化:默认值+接口待填充字段
const dataCards = ref([ const dataCards = ref([
{ {
title: '本周订单总量', title: '本周订单总量',
value: '2,384', value: '2,384',
icon: ShoppingCart, icon: ShoppingCart,
color: '#3B82F6', // blue-500 color: '#3B82F6',
chartData: [30, 40, 20, 50, 40, 60, 70] chartData: [30, 40, 20, 50, 40, 60, 70]
}, },
{ {
title: '本周薪资成本', title: '本周薪资成本',
value: '48', value: '48',
icon: List, icon: List,
color: '#F59E0B', // yellow-500 color: '#F59E0B',
chartData: [20, 40, 30, 50, 40, 60, 50] chartData: [20, 40, 30, 50, 40, 60, 50]
}, },
{ {
title: '库存排行', title: '库存排行',
// 第三卡片不需要value value: '-', // 第三卡片默认隐藏数值
value: '-',
icon: Box, icon: Box,
color: '#10B981', // green-500 color: '#10B981',
chartData: [40, 30, 50, 40, 60, 50, 70] chartData: [40, 30, 50, 40, 60, 50, 70]
}, },
{ {
title: '系统状态', title: '系统状态',
value: '正常', value: '正常',
icon: Monitor, icon: Monitor,
color: '#8B5CF6', // purple-500 color: '#8B5CF6',
// 第四卡片不需要图表数据 chartData: [] // 第四卡片图表数据
chartData: []
} }
]); ]);
// 5. 图表DOM引用存储前3张卡片的图表容器
const chartRefs = ref([]); const chartRefs = ref([]);
// 6. 页面挂载:请求接口数据+初始化图表
onMounted(() => { onMounted(() => {
overview().then(res => { overview()
dataCards.value[0].value = res.data.orderStatistics.weekOrderCount; .then(res => {
dataCards.value[0].chartData = res.data.orderStatistics.weeklyTrend.map(item => item.value); // 填充订单总量数据
dataCards.value[0].value = res.data.orderStatistics.weekOrderCount;
dataCards.value[0].chartData = res.data.orderStatistics.weeklyTrend.map(item => item.value);
dataCards.value[1].value = res.data.salaryStatistics.weekSalary; // 填充薪资成本数据
dataCards.value[1].chartData = res.data.salaryStatistics.weeklyTrend.map(item => item.value); dataCards.value[1].value = res.data.salaryStatistics.weekSalary;
dataCards.value[1].chartData = res.data.salaryStatistics.weeklyTrend.map(item => item.value);
// 处理库存排行数据 // 填充库存排行图表数据(无数值)
dataCards.value[2].chartData = res.data.stockRanking.map(item => item.quantity); dataCards.value[2].chartData = res.data.stockRanking.map(item => item.quantity);
initCharts(); // 数据更新后初始化图表
}) initCharts();
}) })
.catch(err => {
console.error('仪表盘数据请求失败:', err);
// 失败时仍初始化默认图表,避免页面空白
initCharts();
});
});
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
// 1. 卡片容器:网格布局紧凑化
.dashboard-cards { .dashboard-cards {
display: grid; display: grid;
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(4, 1fr);
gap: 1.5rem; gap: 0.75rem; // 间距从1.5rem减至0.75rem减少50%
margin-bottom: 2rem; margin-bottom: 1.25rem; // 底部外间距从2rem减至1.25rem
padding: 0 0.5rem; // 轻微左右内边距,避免贴边
} }
// 2. 单个卡片:整体压缩
.stats-card { .stats-card {
border-radius: 0.5rem !important; border-radius: 0.375rem !important; // 圆角从0.5rem减至0.375rem
backdrop-filter: blur(4px); backdrop-filter: blur(4px);
background-color: rgba(255, 255, 255, 0.8); background-color: rgba(255, 255, 255, 0.8);
border: 1px solid rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.2);
padding: 0.75rem !important; // 内边距从1.5rem减至0.75rem减少50%
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); // 弱化阴影
transform: scale(1); transform: scale(1);
transition: all 0.3s ease; transition: all 0.2s ease; // 缩短过渡时间
// hover效果轻微放大不占用过多空间
&:hover { &:hover {
transform: scale(1.02); transform: scale(1.01); // 放大比例从1.02减至1.01
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
} }
} }
// 3. 卡片头部:垂直压缩
.card-header { .card-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: flex-start; align-items: flex-start;
margin-bottom: 1rem; margin-bottom: 0.4rem; // 头部与图表间距从1rem减至0.4rem
} }
// 4. 标题+数值容器:行高压缩
.card-info { .card-info {
// 用于包裹标题和值 line-height: 1.15; // 减少垂直占用
} }
// 5. 卡片标题:字体缩小+间距压缩
.card-title { .card-title {
color: #6B7280; // gray-500 color: #6B7280;
font-size: 0.875rem; font-size: 0.725rem; // 字体从0.875rem减至0.725rem
margin-bottom: 0.25rem; margin-bottom: 0.1rem; // 与数值间距从0.25rem减至0.1rem
font-weight: 500;
margin: 0 0 0.1rem 0; // 清除默认margin
} }
// 6. 卡片数值:字体缩小+行高优化
.card-value { .card-value {
font-size: 1.5rem; font-size: 1.15rem; // 字体从1.5rem减至1.15rem
font-weight: 600; font-weight: 600;
line-height: 1.25; // 避免换行
color: #1F2937;
margin: 0; // 清除默认margin
} }
// 7. 卡片图标:尺寸缩小+位置优化
.card-icon { .card-icon {
font-size: 1.5rem; font-size: 1.15rem; // 图标从1.5rem减至1.15rem
margin-top: 0.05rem; // 轻微上移,与标题对齐
} }
// 8. 图表容器:高度压缩
.chart-container { .chart-container {
height: 3rem; height: 2.2rem; // 图表高度从3rem减至2.2rem减少27%
width: 100%; width: 100%;
margin-top: 0.15rem; // 顶部微小间距,避免贴边
.chart { overflow: hidden; // 防止图表溢出
width: 100%;
height: 100%;
}
} }
// 第四个卡片没有图表,调整一下底部边距 // 9. 图表DOM占满容器
.chart {
width: 100%;
height: 100%;
}
// 10. 特殊卡片处理:第四张无图表,清除底部间距
.stats-card:nth-child(4) .card-header { .stats-card:nth-child(4) .card-header {
margin-bottom: 0; margin-bottom: 0;
} }
</style>
// 11. 特殊卡片处理:第三张无数值,图标居中
.stats-card:nth-child(3) .card-header {
align-items: center; // 避免顶部留白
}
// 12. 响应式适配:小屏幕保持紧凑
@media (max-width: 1200px) {
.dashboard-cards {
gap: 0.6rem; // 进一步缩小间距
}
.card-title {
font-size: 0.7rem;
}
.card-value {
font-size: 1.1rem;
}
}
</style>

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px"> <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="60px">
<el-form-item label="汇报标题" prop="reportTitle"> <el-form-item label="汇报标题" prop="reportTitle">
<el-input <el-input
v-model="queryParams.reportTitle" v-model="queryParams.reportTitle"

View File

@@ -115,8 +115,8 @@
<el-table v-loading="loading" :data="expressList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="expressList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/> <el-table-column type="selection" width="55" align="center"/>
<el-table-column label="物流号" align="center" prop="expressCode"/> <el-table-column label="物流号" align="center" prop="expressCode"/>
<el-table-column label="数据状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<el-tag v-if="scope.row.status===0" type="warning">未确认</el-tag> <el-tag v-if="scope.row.status===0" type="warning">未确认</el-tag>
<el-tag v-if="scope.row.status===1" type="primary">进行中</el-tag> <el-tag v-if="scope.row.status===1" type="primary">进行中</el-tag>
@@ -139,9 +139,9 @@
<ExpressRemainTime :planDate="scope.row.planDate" :status="scope.row.status" /> <ExpressRemainTime :planDate="scope.row.planDate" :status="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="对方姓名" align="center" prop="supplyName"/> <el-table-column label="对方姓名" align="center" prop="supplyName" width="90"/>
<el-table-column label="负责人" align="center" prop="ownerName"/> <el-table-column label="负责人" align="center" prop="ownerName"/>
<el-table-column label="负责人手机" align="center" prop="ownerPhone"/> <el-table-column label="手机" align="center" prop="ownerPhone"/>
<el-table-column label="计划到货时间" align="center" prop="planDate" width="180"> <el-table-column label="计划到货时间" align="center" prop="planDate" width="180">
<template #default="scope"> <template #default="scope">
<span>{{parseTime(scope.row.planDate,'{y}-{m}-{d}')}}</span> <span>{{parseTime(scope.row.planDate,'{y}-{m}-{d}')}}</span>
@@ -152,7 +152,7 @@
<span>{{scope.row.updateTime}}</span> <span>{{scope.row.updateTime}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物流公司标识" align="center" prop="expressType"> <el-table-column label="物流公司" align="center" prop="expressType" width="90">
<template #default="scope"> <template #default="scope">
<dict-tag :options="oa_express_type" :value="scope.row.expressType"/> <dict-tag :options="oa_express_type" :value="scope.row.expressType"/>
</template> </template>

View File

@@ -2,7 +2,7 @@
<div class="message-view-page"> <div class="message-view-page">
<el-row> <el-row>
<!-- 左侧消息列表 --> <!-- 左侧消息列表 -->
<el-col :span="8" class="message-list" v-loading = "loading"> <el-col :span="8" class="message-list" v-loading="loading">
<el-card class="list-container"> <el-card class="list-container">
<pagination <pagination
:total="total" :total="total"
@@ -10,48 +10,42 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
<div <div
v-for="(msg, index) in messageList" v-for="(msg, index) in messageList"
:key="msg.feedbackId" :key="msg.feedbackId"
class="message-item" class="message-item"
:class="{ 'unread': msg.state === 0 }" :class="{ 'unread': msg.state === 0 }"
@click="handleSelectMessage(msg)" @click="handleSelectMessage(msg)"
> >
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
<div> <div>
<div class="message-title"> <div class="message-title">
<!-- 已读/未读标记这里用一个简单的小圆点来表示也可以根据需求改成文字或图标 --> <span class="state-dot"></span>
<span class="state-dot"></span> <span>{{ msg.title }}</span>
<span>{{ msg.title }}</span>
</div>
<div class="message-brief">{{ msg.state === 0 ? '点击查看' : '已读' }}</div>
</div> </div>
<div class="message-brief">{{ msg.state === 0 ? '点击查看' : '已读' }}</div>
<div>
<el-button icon="Delete" @click="handleDel(msg)" circle></el-button>
</div>
</div>
</div> </div>
<div>
<el-button icon="Delete" @click="handleDel(msg)" size="mini"></el-button>
</div>
</div>
</div>
</el-card> </el-card>
</el-col> </el-col>
<!-- 右侧显示消息详情或空状态 --> <!-- 右侧显示消息详情或空状态 -->
<el-col :span="16" class="message-detail" v-loading="msgLoading"> <el-col :span="16" class="message-detail" v-loading="msgLoading">
<!-- 在右上角放置一个圆形加号按钮点击后打开对话框 -->
<div class="add-feedback-btn"> <div class="add-feedback-btn">
<el-button <el-button
circle
type="primary" type="primary"
icon="Plus" icon="Plus"
@click="dialogVisible = true" @click="dialogVisible = true"
size="medium"
></el-button> ></el-button>
</div> </div>
<!-- 详情内容 --> <!-- 详情内容 -->
<el-card v-if="selectedMessage" class="detail-container"> <el-card v-if="selectedMessage" class="detail-container">
<!-- v-html 展示富文本内容 -->
<div v-html="selectedMessage.content"></div> <div v-html="selectedMessage.content"></div>
</el-card> </el-card>
<div v-else class="detail-empty"> <div v-else class="detail-empty">
@@ -64,27 +58,28 @@
<el-dialog <el-dialog
title="新增反馈" title="新增反馈"
v-model="dialogVisible" v-model="dialogVisible"
width="800px" width="600px"
@close="resetForm" @close="resetForm"
> >
<el-form <el-form
ref="formRef" ref="formRef"
:model="form" :model="form"
label-width="80px" label-width="70px"
:rules="rules" :rules="rules"
status-icon status-icon
size="small"
> >
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input v-model="form.title"></el-input> <el-input v-model="form.title"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="反馈内容"> <el-form-item label="反馈内容">
<editor v-model="form.content" :min-height="192"/> <editor v-model="form.content" :min-height="160"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button> <el-button size="small" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleAddFeedback">提交</el-button> <el-button size="small" type="primary" @click="handleAddFeedback">提交</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@@ -98,28 +93,19 @@ export default {
data() { data() {
return { return {
messageList: [], messageList: [],
// 当前选中的消息
selectedMessage: null, selectedMessage: null,
// 分页查询参数
queryParams: { queryParams: {
pageSize: 10, pageSize: 10,
pageNum: 1, pageNum: 1,
}, },
total: 0, total: 0,
loading:false, loading: false,
masLoading:false, msgLoading: false,
// 新增反馈对话框的显示控制
dialogVisible: false, dialogVisible: false,
// 表单数据
form: { form: {
title: "", title: "",
content: "", content: "",
// 你可以根据实际需求添加更多字段
}, },
// 表单校验规则(示例)
rules: { rules: {
title: [ title: [
{required: true, message: "请输入标题", trigger: "blur"}, {required: true, message: "请输入标题", trigger: "blur"},
@@ -135,57 +121,42 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
// 处理删除 handleDel(row) {
handleDel(row){
delFeedback(row.feedbackId).then(res => { delFeedback(row.feedbackId).then(res => {
this.$message.success("删除成功!"); this.$message.success("删除成功!");
this.getList(); this.getList();
this.selectedMessage=null; this.selectedMessage = null;
}) })
}, },
// 获取反馈列表
getList() { getList() {
this.loading = true; this.loading = true;
listFeedback(this.queryParams).then((res) => { listFeedback(this.queryParams).then((res) => {
// 这里根据你的后端返回结构进行赋值
this.messageList = res.rows; this.messageList = res.rows;
this.total = res.total; this.total = res.total;
this.loading = false; this.loading = false;
}); });
}, },
// 选中某条消息
handleSelectMessage(msg) { handleSelectMessage(msg) {
this.msgLoading = true; this.msgLoading = true;
this.selectedMessage = msg; this.selectedMessage = msg;
// 将消息状态改为已读
if (msg.state === 0) { if (msg.state === 0) {
msg.state = 1 msg.state = 1
toRead(msg).then((res) => { toRead(msg).then((res) => {})
})
} }
this.msgLoading = false; this.msgLoading = false;
// 设置当前选中的消息
}, },
// 提交新增反馈
handleAddFeedback() { handleAddFeedback() {
this.$refs.formRef.validate((valid) => { this.$refs.formRef.validate((valid) => {
if (!valid) return; // 如果表单校验不通过直接return if (!valid) return;
// 调用新增API
addFeedback(this.form).then((res) => { addFeedback(this.form).then((res) => {
// 假设请求成功后需要刷新列表
this.$message.success("反馈新增成功!"); this.$message.success("反馈新增成功!");
this.dialogVisible = false; this.dialogVisible = false;
this.getList(); this.getList();
}).catch(err => { }).catch(err => {
// 错误处理
this.$message.error(err.message || "新增失败"); this.$message.error(err.message || "新增失败");
}); });
}); });
}, },
// 对话框关闭时重置表单
resetForm() { resetForm() {
this.$refs.formRef && this.$refs.formRef.resetFields(); this.$refs.formRef && this.$refs.formRef.resetFields();
}, },
@@ -195,21 +166,23 @@ export default {
<style scoped> <style scoped>
.message-view-page { .message-view-page {
padding: 20px; padding: 12px;
box-sizing: border-box; box-sizing: border-box;
} }
.list-container { .list-container {
height: 600px; /* 根据需要自行调整 */ height: 500px;
overflow-y: auto; overflow-y: auto;
padding: 8px;
} }
/* 消息列表 */ /* 消息列表 */
.message-item { .message-item {
cursor: pointer; cursor: pointer;
padding: 10px; padding: 6px 8px;
margin-bottom: 8px; margin-bottom: 4px;
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;
transition: background-color 0.2s;
} }
.message-item:hover { .message-item:hover {
@@ -218,58 +191,84 @@ export default {
/* 未读消息红点 */ /* 未读消息红点 */
.message-item.unread .state-dot { .message-item.unread .state-dot {
background-color: #fa5555; /* 未读的红色小圆点 */ background-color: #fa5555;
} }
.message-title { .message-title {
display: flex; display: flex;
align-items: center; align-items: center;
font-size: 13px;
line-height: 1.4;
} }
/* 小圆点标记 */ /* 小圆点标记 */
.state-dot { .state-dot {
display: inline-block; display: inline-block;
width: 8px; width: 6px;
height: 8px; height: 6px;
border-radius: 50%; border-radius: 50%;
background-color: #cccccc; /* 已读时的灰色小圆点 */ background-color: #cccccc;
margin-right: 8px; margin-right: 6px;
} }
.message-brief { .message-brief {
color: #666; color: #666;
font-size: 12px; font-size: 11px;
margin-top: 2px;
} }
/* 右侧详情 */ /* 右侧详情 */
.message-detail { .message-detail {
padding-left: 20px; padding-left: 12px;
position: relative; /* 为了定位“加号按钮” */ position: relative;
} }
/* 在右上角放置一个圆形加号按钮 */ /* 加号按钮 */
.add-feedback-btn { .add-feedback-btn {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
margin: 10px; margin: 6px;
} }
.detail-container { .detail-container {
height: 600px; /* 根据需要自行调整 */ height: 500px;
overflow-y: auto; overflow-y: auto;
padding: 12px;
} }
.detail-empty { .detail-empty {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
height: 600px; /* 根据需要自行调整 */ height: 500px;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
border-radius: 4px; border-radius: 4px;
} }
/* 对话框底部按钮居中或居右,可自行调整 */ /* 对话框样式 */
::v-deep .el-dialog__header {
padding: 10px 15px;
}
::v-deep .el-dialog__body {
padding: 10px 15px;
}
::v-deep .el-dialog__footer {
padding: 8px 15px;
}
::v-deep .el-form-item {
margin-bottom: 10px;
}
::v-deep .el-input__inner {
height: 30px;
line-height: 30px;
font-size: 13px;
}
.dialog-footer { .dialog-footer {
text-align: right; text-align: right;
} }

View File

@@ -161,6 +161,7 @@ getCookie()
align-items: center; align-items: center;
height: 100%; height: 100%;
background-size: cover; background-size: cover;
background-image: url('@/assets/images/back.jpg');
/* 亮色主题变量 */ /* 亮色主题变量 */
--color-bg-primary: #f5f7fa; --color-bg-primary: #f5f7fa;
@@ -198,6 +199,10 @@ getCookie()
align-items: center; align-items: center;
box-sizing: border-box; box-sizing: border-box;
width: 60%; width: 60%;
border-radius: 6px;
background: var(--color-bg-form);
padding: 25px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
padding: 25px 25px 5px 25px; padding: 25px 25px 5px 25px;
} }
@@ -217,7 +222,7 @@ getCookie()
border-radius: 6px; border-radius: 6px;
background: var(--color-bg-form); background: var(--color-bg-form);
padding: 25px; padding: 25px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); // box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
.el-input { .el-input {
height: 40px; height: 40px;

View File

@@ -8,23 +8,23 @@
<el-input v-model="queryParams.incomeType" placeholder="请输入收入类型" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.incomeType" placeholder="请输入收入类型" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button size="small" type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> <el-button size="small" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate">修改</el-button> <el-button size="small" type="success" plain icon="Edit" :disabled="single" @click="handleUpdate">修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete">删除</el-button> <el-button size="small" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete">删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button> <el-button size="small" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>

View File

@@ -16,14 +16,15 @@
<el-input v-model="queryParams.type" placeholder="请输入类型" /> <el-input v-model="queryParams.type" placeholder="请输入类型" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button size="small" type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
@@ -32,6 +33,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="success" type="success"
plain plain
icon="Edit" icon="Edit"
@@ -41,6 +43,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
@@ -50,6 +53,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="warning" type="warning"
plain plain
icon="Download" icon="Download"

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"> <el-form :model="queryParams" ref="queryRef" :inline="true" size="small" v-show="showSearch" label-width="60px">
<el-form-item label="薪酬类型" prop="paymentType"> <el-form-item label="薪酬类型" prop="paymentType">
<el-radio-group v-model="queryParams.paymentType" @change="getList"> <el-radio-group v-model="queryParams.paymentType" @change="getList">
<el-radio-button label="hourly">计时</el-radio-button> <el-radio-button label="hourly">计时</el-radio-button>

View File

@@ -5,7 +5,7 @@
<div class="container flex items-center justify-between gap-4"> <div class="container flex items-center justify-between gap-4">
<!-- 日期选择 --> <!-- 日期选择 -->
<div class="date-filter flex items-center gap-2"> <div class="date-filter flex items-center gap-2">
<el-radio-group v-model="selectedDateRange"> <el-radio-group v-model="selectedDateRange" size="small">
<el-radio-button v-for="btn in dateButtons" :key="btn.value" :label="btn.value"> <el-radio-button v-for="btn in dateButtons" :key="btn.value" :label="btn.value">
{{ btn.label }} {{ btn.label }}
</el-radio-button> </el-radio-button>

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px"> <el-form :model="queryParams" ref="queryRef" size="small" :inline="true" v-show="showSearch" label-width="60px">
<el-form-item label="员工" prop="employeeName"> <el-form-item label="员工" prop="employeeName">
<user-select v-model="queryParams.employeeId" placeholder="请选择员工" /> <user-select v-model="queryParams.employeeId" placeholder="请选择员工" />
</el-form-item> </el-form-item>

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" size="small" v-show="showSearch" label-width="60px">
<el-form-item label="订单编号" prop="orderId"> <el-form-item label="订单编号" prop="orderId">
<el-select style="width: 150px;" clearable v-model="queryParams.orderId" placeholder="请选择订单编号" filterable :loading="loading"> <el-select style="width: 150px;" clearable v-model="queryParams.orderId" placeholder="请选择订单编号" filterable :loading="loading">
<el-option v-for="item in orderList" :key="item.orderId" :value="item.orderId" :label="item.orderCode"/> <el-option v-for="item in orderList" :key="item.orderId" :value="item.orderId" :label="item.orderCode"/>

View File

@@ -18,14 +18,15 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button size="small" type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> --> </el-form> -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
@@ -34,6 +35,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="success" type="success"
plain plain
icon="Edit" icon="Edit"
@@ -43,6 +45,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
@@ -52,6 +55,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="warning" type="warning"
plain plain
icon="Download" icon="Download"

View File

@@ -18,14 +18,15 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button size="small" type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> --> </el-form> -->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
@@ -34,6 +35,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="success" type="success"
plain plain
icon="Edit" icon="Edit"
@@ -43,6 +45,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
@@ -52,6 +55,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="warning" type="warning"
plain plain
icon="Download" icon="Download"

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" size="small" v-show="showSearch" label-width="60px">
<el-form-item label="采购编号" prop="detailCode"> <el-form-item label="采购编号" prop="detailCode">
<el-input <el-input
v-model="queryParams.detailCode" v-model="queryParams.detailCode"
@@ -44,6 +44,7 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
@@ -52,6 +53,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="success" type="success"
plain plain
icon="Edit" icon="Edit"
@@ -61,6 +63,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
@@ -70,6 +73,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="warning" type="warning"
plain plain
icon="Download" icon="Download"

View File

@@ -19,6 +19,7 @@
</el-form-item> </el-form-item>
<el-form-item label="供货商类型" prop="typeId"> <el-form-item label="供货商类型" prop="typeId">
<el-select <el-select
size="small"
style="width: 180px;" style="width: 180px;"
v-model="queryParams.typeId" v-model="queryParams.typeId"
placeholder="请选择供货商类型" placeholder="请选择供货商类型"
@@ -32,14 +33,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button size="small" type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button size="small" icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="primary" type="primary"
plain plain
icon="Plus" icon="Plus"
@@ -48,6 +50,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="success" type="success"
plain plain
icon="Edit" icon="Edit"
@@ -57,6 +60,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
@@ -66,6 +70,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
size="small"
type="warning" type="warning"
plain plain
icon="Download" icon="Download"

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryRef" :inline="true" size="small" v-show="showSearch">
<el-form-item label="部门名称" prop="deptName"> <el-form-item label="部门名称" prop="deptName">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form :model="queryParams" ref="queryRef" :inline="true" size="small" v-show="showSearch">
<el-form-item label="岗位编码" prop="postCode"> <el-form-item label="岗位编码" prop="postCode">
<el-input <el-input
v-model="queryParams.postCode" v-model="queryParams.postCode"

View File

@@ -1,6 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="68px"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" size="small" :inline="true" label-width="68px">
<el-form-item label="角色名称" prop="roleName"> <el-form-item label="角色名称" prop="roleName">
<el-input <el-input
v-model="queryParams.roleName" v-model="queryParams.roleName"