Files
ulthon_admin/public/static/admin/css/public.scss
augushong 3770e76583 fix(table): 卡片设置面板与操作按钮交互打磨
- 外点收起改捕获阶段监听,点击筛选列等其他工具按钮时面板正确消失
- 排序点击后面板保持打开并就地刷新高亮,可连续切换排序
- 设置面板行距压缩(行高约 28px、最小宽 160px)
- 卡片操作按钮间距紧凑(清零 layui 相邻 margin,统一 6px gap)
2026-10-05 10:04:51 +00:00

1058 lines
20 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@import url("../../plugs/layui-v2.10.1/css/layui.css");
@import url("../../plugs/font-awesome-4.7.0/css/font-awesome.min.css");
@import url("../css/iconfont.css");
@import url('../../plugs/jq-module/city-picker/css/city-picker.css');
html,
body {
height: 100%;
background: #f2f2f2;
}
.layuimini-container {
min-height: 250px;
padding: 15px;
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px;
}
.layuimini-main {
position: relative;
padding: 15px 15px;
background-color: #ffffff;
border: 1px solid #f2f2f2;
border-radius: 5px;
}
.text-center {
text-align: center;
}
.layuimini-form {
margin-top: 10px;
}
.layuimini-form .layui-form-item {
position: relative;
padding: 0 60px 0 0;
line-height: 24px;
}
.layuimini-form.multiple-columns .hr-line {
width: 100%;
}
.layuimini-form.multiple-columns .hr-line+.layui-form-item {
width: 100%;
}
.layuimini-form.multiple-columns .layui-form-item {
display: inline-block;
width: calc(50% - 62px);
flex-shrink: 1;
}
.layuimini-form.multiple-columns .layui-form-item.full-line {
display: block;
width: calc(100% - 62px);
}
.easy-bg-white {
background-color: #ffffff;
height: auto;
}
.hr-line {
color: #fff;
height: 1px;
margin: 30px 0;
background-color: #fff;
border-top: 1px dashed #e7eaec;
}
/**重写layui表格自适应*/
.layuimini-container .layui-table-cell {
max-width: 100%;
}
/**数据表格-搜索表单样式*/
.layuimini-container .table-search-fieldset {
margin: 0;
border: 1px solid #e6e6e6;
padding: 10px 20px 5px 20px;
color: #6b6b6b;
}
.layuimini-container .table-search-fieldset input::-webkit-input-placeholder {
color: #a9a9a9;
}
.layuimini-container .table-search-fieldset input:-ms-input-placeholder {
color: #a9a9a9;
}
.layuimini-container .table-search-fieldset input::-ms-input-placeholder {
color: #a9a9a9;
}
/**图标选择器*/
.layui-iconpicker-body.layui-iconpicker-body-page .hide {
display: none;
}
/**必填红点 */
.layuimini-form>.layui-form-item .required:after {
content: '*';
color: red;
position: absolute;
margin-left: 4px;
font-weight: bold;
line-height: 1.8em;
top: 6px;
right: 5px;
}
/*.layuimini-form>.layui-form-item>.layui-form-label {width:120px !important;}*/
/*.layuimini-form>.layui-form-item>.layui-input-block {margin-left:150px !important;}*/
.layuimini-form>.layui-form-item>.layui-input-block tip,
.layuimini-form>.layui-form-item>.layui-inline tip {
display: inline-block;
margin-top: 5px;
line-height: 18px;
font-size: 14px;
color: #a29c9c;
margin-right: 10px;
&::before{
content: "";
display: inline-block;
width: 4px;
height: 4px;
border-radius: 50%;
background-color: #a29c9c;
margin-right: 5px;
vertical-align: middle; // 添加此行
}
}
/** 按钮背景色 */
.layuimini-container .layuimini-btn-primary {
color: #fff;
background-color: #2c3e50;
}
.layuimini-container .layui-btn-sm i {
font-size: 12px !important;
}
/**文件上传样式*/
.layuimini-upload {
position: relative;
}
.layuimini-upload .layuimini-upload-btn {
display: inline-block;
position: absolute;
right: 0px;
background-color: #fff;
}
.layuimini-upload-show {
margin-top: 10px;
margin-bottom: 0;
}
.layuimini-upload-show li {
position: relative;
display: inline-block;
padding: 5px 0 5px 0;
padding-left: 10px;
padding-right: 10px;
border: 1px solid #e2e2e2;
}
.layuimini-upload-show a img {
height: 80px;
object-fit: cover;
}
.layuimini-upload-show .uploads-delete-tip {
position: absolute;
right: 10px;
font-size: 12px;
}
.bg-red {
background-color: #e74c3c !important;
}
.color-red {
color: #e74c3c !important;
}
.badge {
display: inline-block;
min-width: 10px;
padding: 3px 7px;
font-size: 11px;
font-weight: bold;
color: #fff;
line-height: 1;
vertical-align: middle;
white-space: nowrap;
text-align: center;
background-color: #777777;
border-radius: 10px;
}
/**vue隐藏样式*/
[v-cloak] {
display: none;
}
/**表格url样式*/
.layuimini-table-url {
background-color: #1497f3;
color: #ffffff;
border-radius: 3px;
size: 8px !important;
padding: 2px
}
.layuimini-table-url:hover {
background-color: #1497f3;
color: #ffffff;
border-radius: 3px;
size: 8px !important;
padding: 2px
}
/**后台权限隐藏*/
/*[auth] { display: none; }*/
.layui-form-label {
width: 100px;
}
.layui-input-block {
margin-left: 130px;
min-height: 36px
}
/**
table样式
*/
.layuimini-container .layui-laypage .layui-laypage-curr .layui-laypage-em {
border-radius: 30px !important;
background-color: #1e9fff !important;
}
.layuimini-container .layui-table-tool {
background-color: #ffffff;
border-bottom: none !important;
padding-bottom: 15px !important;
}
.layuimini-container .layui-table-view {
border: none !important;
}
.layuimini-container .layui-table-view::after {
content: "";
display: block;
clear: both;
height: 0;
visibility: hidden;
}
.layuimini-container .layui-table-box {
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
}
.layuimini-container .layui-table-page,
.layui-table-total {
border-width: 0px 0 0;
}
.layuimini-container .layui-table-box .layui-table-header th {
font-weight: bold !important;
color: #565656 !important;
}
/**
搜索
*/
.form-search .layui-btn {
height: 32px;
line-height: 28px;
font-size: 12px;
padding: 0 10px;
}
.form-search .layui-form-label {
padding: 0 8px;
height: 32px;
line-height: 30px;
}
.form-search .layui-input-inline {
width: 170px;
}
.form-search .layui-input-inline input,
.form-search .layui-input-inline select {
width: 100%;
height: 32px;
padding: 2px 8px;
line-height: 1em;
font-size: 12px;
}
.form-search .layui-form-select dl {
top: 31px;
padding: 0;
}
/**
按钮
*/
.layuimini-container .layui-btn-success {
color: #fff;
background-color: #4bb368;
border-color: #4bb368;
}
.layuimini-container .layui-btn-danger {
color: #fff;
background-color: #f56c6c;
border-color: #f56c6c;
}
.layuimini-container .layui-table-tool .layui-btn+.layui-btn {
margin-left: 5px;
}
.layuimini-container .layui-table-tool .layui-inline[lay-event] {
width: 30px;
height: 30px;
line-height: 30px;
padding: 0px;
}
.layuimini-container .layui-table-tool .layui-inline .layui-icon {
font-size: 16px;
}
.layuimini-container .layui-table-tool-self {
right: 0px;
}
.layuimini-container .layui-table-tool {
padding: 10px 0px;
}
/* 手机端的表格头部操作 */
.layuimini-container .main-tool {
padding: 15px;
}
/**
开关
*/
.layuimini-container .layui-form-switch {
border: 1px solid #f56d6d;
background-color: #f56d6d;
}
.layuimini-container .layui-form-switch em {
color: #fff !important;
}
.layuimini-container .layui-form-switch i {
background-color: #ffffff;
}
.layuimini-container .layui-form-onswitch {
border-color: #1f9fff;
background-color: #1f9fff;
}
/**
下拉选择
*/
.layuimini-container .layui-form-select dl dd.layui-this {
background-color: #1e9fff !important;
color: #fff;
}
/**
弹出层样式
*/
.layui-layer-easy .layui-layer-title {
background: #2c3e50 !important;
color: #fff !important;
border-bottom: none;
}
.layui-layer-easy .layui-layer-title~.layui-layer-setwin>a {
height: 42px;
line-height: 42px;
display: inline-block;
}
.layui-layer-easy.layui-layer-border {
border: none !important;
box-shadow: 1px 1px 50px rgba(0, 0, 0, 0.3) !important;
}
.layui-layer-easy.layui-layer-iframe {
overflow: visible;
}
.layui-layer-easy .layui-layer-moves {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.layui-layer-easy .layui-layer-btn {
text-align: center !important;
padding: 10px !important;
background: #ecf0f1;
overflow: hidden;
}
.layui-layer-easy .layui-layer-btn a {
background-color: #95a5a6;
border-color: #95a5a6;
color: #fff !important;
height: 31px;
margin-top: 0;
border: 1px solid transparent;
}
.layui-layer-easy .layui-layer-btn .layui-layer-btn0 {
background-color: #1E9FFF;
border-color: #1E9FFF;
}
.layui-layer-easy .layui-layer-footer {
padding: 8px 20px;
background-color: #ecf0f1;
height: auto;
text-align: inherit !important;
}
.layui-layer-easy .layui-layer-setwin>span {
color: #fff;
}
.layui-layer-easy .layui-layer-setwin>a {
background: none !important;
}
.layui-layer-easy .layui-layer-setwin>a cite {
display: none;
}
.layui-layer-easy .layui-layer-setwin>a:after {
content: "\e625";
font-family: iconfont;
font-style: normal;
font-weight: normal;
text-decoration: inherit;
position: absolute;
font-size: 18px;
color: #fff;
margin: 0;
z-index: 1;
}
.layui-layer-easy .layui-layer-setwin>a:hover {
text-decoration: none !important;
background: none !important;
}
.layui-layer-easy .layui-layer-setwin>a:focus {
text-decoration: none !important;
}
.layui-layer-easy .layui-layer-setwin .layui-layer-max::after,
.layui-layer-easy .layui-layer-setwin .layui-layer-max::before {
border-color: #fff;
}
.layui-layer-easy .layui-layer-setwin .layui-layer-min::before {
background-color: #fff;
}
.layui-layer-content {
clear: both;
}
.layui-layer-easy-msg {
min-width: 100px;
}
.layui-layer-easy-tab .layui-layer-title .layui-this {
color: #333;
}
.layui-layer-easy-tab .layui-layer-content .layui-layer-tabmain {
margin: 0;
padding: 0;
}
@media screen and (max-width: 1024px) {
.layuimini-form .layui-form-item {
position: relative;
padding: 0 30px 0 0;
line-height: 24px;
}
}
@media screen and (max-width: 768px) {
.easyadmin-export-btn {
display: none;
}
}
/**
资源加载锁
*/
.easy-load-lock {
cursor: not-allowed;
}
.line-limit-length {
width: 200px;
overflow: hidden;
text-overflow: ellipsis;
background: goldenrod;
white-space: nowrap;
}
/**
详情页面样式
*/
/* 详情页面容器 */
.detail-container {
background-color: #ffffff;
}
/* 详情页面卡片 */
.detail-card {
background-color: #ffffff;
border: 1px solid #e8e8e8;
border-radius: 4px;
}
/* 详情页面头部 */
.detail-header {
background-color: #f8f9fa;
border-bottom: 1px solid #e8e8e8;
}
/* 详情标题 */
.detail-title {
font-size: 20px;
font-weight: bold;
color: #333;
}
/* 详情ID */
.detail-id {
font-size: 12px;
color: #999;
}
/* 详情内容区域 */
.detail-content {
background-color: #ffffff;
}
/* 左侧主体内容 */
.detail-main {
background-color: #ffffff;
}
/* 右侧基础信息 */
.detail-side {
background-color: #f5f7fa;
border-radius: 4px;
}
/* 右侧面板标题 */
.detail-side-title {
font-size: 16px;
font-weight: bold;
color: #333;
padding: 5px;
border-bottom: 1px solid #e8e8e8;
}
/* 字段组样式 */
.detail-field-group {
margin-bottom: 0;
}
/* 字段项样式 */
.detail-field-item {
padding: 5px;
border-bottom: 1px solid #f0f0f0;
overflow: hidden;
}
.detail-field-item:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
/* 字段标签样式 */
.detail-field-label {
font-weight: bold;
color: #666;
margin-bottom: 5px;
font-size: 14px;
float: left;
width: 100px;
text-align: left;
}
/* 字段值样式 */
.detail-field-value {
color: #333;
line-height: 1.5;
font-size: 14px;
margin-left: 110px;
min-height: 30px;
word-break: break-word;
}
/* 详情图片样式 */
.detail-image {
max-width: 100%;
height: auto;
border-radius: 4px;
border: 1px solid #e8e8e8;
}
/* 详情操作按钮 */
.detail-actions {
text-align: right;
}
/* 响应式设计 */
@media (max-width: 768px) {
.detail-field-label {
float: none;
width: 100%;
margin-bottom: 5px;
}
.detail-field-value {
margin-left: 0;
}
}
.search-hide-item {
display: none;
}
.form-item-time-limit .layui-input-inline {
display: flex;
width: 274px;
}
.form-item-number-limit .layui-input-inline {
display: flex;
}
/* 重写地区选择器的样式 */
.city-picker-span {
height: 38px;
border-width: 1px;
border-style: solid;
background-color: #fff;
color: rgba(0, 0, 0, .85);
border-radius: 2px;
border-color: #eee;
}
.city-picker-span:hover {
border-color: #eee !important;
}
.city-picker-span>.placeholder {
padding-left: 10px;
}
.city-picker-span.focus,
.city-picker-span.open {
border-color: #d2d2d2 !important;
}
[data-toggle="copy-text"].copy-rendered {
cursor: pointer;
}
.table-tpl-container {
position: absolute;
z-index: 9999999999;
right: 0;
white-space: nowrap;
border: 1px solid #d2d2d2;
text-align: left;
overflow-y: auto;
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, .12);
}
.ul-nav-block .item.current {
background-color: rgb(22, 183, 119);
}
.ul-nav-block .item:hover {
background-color: rgb(22, 183, 119, 0.7);
}
.ul-nav-block .item .item-icon {
margin-right: 8;
}
.ul-nav-block .item {
padding: 8px 18px;
}
.ul-nav-block{
border-radius: 0;
}
.layui-table-custom{
}
// 多形态渲染:内置 card 形态(模板管线给容器挂 .ua-layout-cards,卡片本体为
// .ua-data-card 族;admin-table.js 内置 card 模板产出,样式本地化不依赖 CDN)
.ua-layout-cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 12px;
}
.ua-layout-empty {
padding: 24px 0;
text-align: center;
color: #999;
}
// 模板管线 reload 期间的加载态标记(wrapper 在 done 后移除)
.ua-layout-loading {
min-height: 60px;
opacity: .55;
pointer-events: none;
}
.ua-data-card {
display: flex;
flex-direction: column;
padding: 10px 12px;
border: 1px solid #f2f2f2;
border-radius: 5px;
background-color: #fff;
cursor: default;
transition: border-color .2s, box-shadow .2s;
&:hover {
border-color: #d2d2d2;
}
}
.ua-data-card-checked {
border-color: rgb(22, 183, 119);
box-shadow: 0 0 0 1px rgb(22, 183, 119) inset;
}
// 禁用行(_disabled):整卡置灰不可勾选(卡内操作按钮仍可用,与引擎 LAY_DISABLED 只锁勾选的语义一致)
.ua-data-card-disabled {
background-color: #fafafa;
cursor: not-allowed;
.ua-data-card-title,
.ua-data-card-item-value,
.ua-data-card-time {
color: #c2c2c2;
}
}
.ua-data-card-header {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 8px;
margin-bottom: 8px;
border-bottom: 1px solid #f2f2f2;
}
.ua-data-card-title {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-weight: bold;
}
.ua-data-card-check {
flex: none;
margin-left: 8px;
color: #d2d2d2;
font-size: 18px;
line-height: 1;
cursor: pointer;
&:hover {
color: rgb(22, 183, 119);
}
}
.ua-data-card-checked .ua-data-card-check {
color: rgb(22, 183, 119);
}
.ua-data-card-body {
flex: 1;
}
.ua-data-card-item {
display: flex;
margin-bottom: 4px;
line-height: 22px;
&:last-child {
margin-bottom: 0;
}
}
.ua-data-card-item-title {
flex: none;
color: #999;
&::after {
content: ':';
}
}
.ua-data-card-item-value {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ua-data-card-footer {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid #f2f2f2;
}
.ua-data-card-time {
color: #999;
font-size: 12px;
}
.ua-data-card-operat {
display: flex;
flex-wrap: wrap;
gap: 6px;
justify-content: flex-end;
a {
margin: 0;
}
// 压过 layui 基类 .layui-btn+.layui-btn{margin-left:10px}(特异性 0,3,0 > 0,2,0)
.layui-btn + .layui-btn {
margin-left: 0;
}
}
// 卡片操作按钮三态显隐:卡片网格内默认隐藏(保占位防 footer 跳动)、
// hover 显示;设置面板开关写入容器的 ua-card-operat-always 类后常显
// (admin-table.js 两条渲染路径挂类);触屏设备无 hover 能力恒显。
.ua-layout-cards .ua-data-card-operat {
opacity: 0;
visibility: hidden;
transition: opacity .2s, visibility .2s;
}
.ua-data-card:hover .ua-data-card-operat {
opacity: 1;
visibility: visible;
}
.ua-card-operat-always .ua-data-card-operat {
opacity: 1;
visibility: visible;
}
@media (hover: none) {
.ua-layout-cards .ua-data-card-operat {
opacity: 1;
visibility: visible;
}
}
// 卡片操作按钮折叠收纳:按钮超过 3 个时其余移入隐藏容器(admin-table.js
// applyCardOperatFold 移 DOM),点击"更多"锚点展开整行排列,on 态高亮
.ua-card-operat-more-wrap:not(.layui-hide) {
flex-basis: 100%;
display: flex;
justify-content: flex-end;
gap: 6px;
flex-wrap: wrap;
}
.ua-card-operat-more {
cursor: pointer;
color: inherit;
&.on {
color: rgb(22, 183, 119);
}
}
// 卡片设置面板(admin-table.js toggleCardSettingPanel 产出;面板骨架复用上方
// .ul-nav-block 基类,此处补面板本体定位与视觉(与 .table-tpl-container 视图
// 切换下拉同语言)、配置行与自绘开关)。入口为右侧 defaultToolbar 图标组
// 最左侧的 TABLE_CARD_SETTING 图标;面板由受控接线 append 至本表的
// .layui-table-tool(layui 已 position:relative),left/top 不在此声明,
// 打开时经 getBoundingClientRect 差值内联定位(右缘对齐图标右缘、顶边贴
// 图标下沿),向下向左展开
.ua-card-setting-panel {
position: absolute;
z-index: 999;
min-width: 160px;
border: 1px solid #d2d2d2;
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, .12);
white-space: nowrap;
overflow-y: auto;
text-align: left;
}
.ua-card-setting-title {
padding: 6px 12px 0;
color: #999;
font-size: 12px;
}
.ua-card-setting-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 4px 12px;
&:hover {
background-color: #f8f8f8;
}
}
// 排序行紧凑:压过 .ul-nav-block .item 基类的 padding: 8px 18px
//(同特异性 0,2,0,源序靠后胜出,不用 !important)
.ua-card-setting-panel .ua-card-setting-sort-item {
padding: 4px 12px;
line-height: 20px;
}
.ua-card-setting-switch {
position: relative;
flex: none;
width: 36px;
height: 18px;
border-radius: 9px;
background-color: #d2d2d2;
cursor: pointer;
transition: background-color .2s;
&::after {
content: '';
position: absolute;
top: 2px;
left: 2px;
width: 14px;
height: 14px;
border-radius: 50%;
background-color: #fff;
transition: left .2s;
}
&.on {
background-color: rgb(22, 183, 119);
&::after {
left: 20px;
}
}
}
@media (max-width: 768px) {
.ua-layout-cards {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.layuimini-form .layui-form-item {
padding-right: 0;
}
.layuimini-form .layui-form-item .layui-form-label {
float: unset;
display: inline-block;
width: auto;
padding-left: 0;
padding-bottom: 0px;
}
.layuimini-form .layui-form-item .layui-input-block {
margin-left: 0;
}
.layuimini-form.multiple-columns .layui-form-item.full-line {
width: calc(100% - 0px);
}
.layui-table-tool-temp {
padding-right: unset;
padding-bottom: 40px;
}
.layuimini-container .layui-table-tool-self {
right: 0;
bottom: 10px;
top: unset;
}
}
.w-e-text-container,
.w-e-bar {
border: 1px solid #d2d2d2;
}
.search-tab{
.layui-tabs-body{
display: none;
}
}