✨ feat: 调整样式更紧凑
This commit is contained in:
@@ -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%;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
<!-- 全选/反选 按钮 -->
|
<!-- 全选/反选 按钮 -->
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export default {
|
|||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
type: String,
|
type: String,
|
||||||
default: 'mini'
|
default: 'small'
|
||||||
},
|
},
|
||||||
showTop: {
|
showTop: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"/>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user