/* Action组件样式系统 */ :root { /* 颜色变量 */ --action-primary: #1890ff; --action-primary-hover: #40a9ff; --action-primary-active: #096dd9; --action-success: #52c41a; --action-warning: #faad14; --action-error: #f5222d; --action-text: #262626; --action-text-secondary: #8c8c8c; --action-text-disabled: #bfbfbf; --action-border: #d9d9d9; --action-border-hover: #40a9ff; --action-background: #ffffff; --action-background-light: #fafafa; --action-background-disabled: #f5f5f5; /* 兼容性变量 - 支持action-color-前缀 */ --action-color-primary: var(--action-primary); --action-color-primary-light: var(--action-primary-hover); --action-color-primary-dark: var(--action-primary-active); --action-color-primary-rgb: 24, 144, 255; --action-color-secondary: #6c757d; --action-color-secondary-rgb: 108, 117, 125; --action-color-success: var(--action-success); --action-color-warning: var(--action-warning); --action-color-error: var(--action-error); --action-color-text: var(--action-text); --action-color-text-secondary: var(--action-text-secondary); --action-color-text-disabled: var(--action-text-disabled); --action-color-border: var(--action-border); --action-color-border-hover: var(--action-border-hover); --action-color-bg: var(--action-background); --action-color-bg-light: var(--action-background-light); --action-color-bg-disabled: var(--action-background-disabled); /* 尺寸变量 */ --action-border-radius: 6px; --action-border-radius-sm: 4px; --action-border-radius-lg: 8px; --action-padding: 16px; --action-padding-sm: 8px; --action-padding-lg: 24px; --action-margin: 8px; --action-margin-sm: 4px; --action-margin-lg: 16px; /* 间距变量 */ --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --spacing-lg: 24px; --spacing-xl: 32px; /* 圆角变量 */ --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px; /* 字体大小变量 */ --font-size-xs: 12px; --font-size-sm: 14px; --font-size-md: 16px; --font-size-lg: 18px; --font-size-xl: 20px; /* 阴影变量 */ --action-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); --action-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.15); --action-shadow-active: 0 0 0 2px rgba(24, 144, 255, 0.2); /* 动画变量 */ --action-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); --action-transition-fast: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); --action-transition-duration: 0.3s; /* 扩展阴影变量 */ --action-shadow-small: 0 1px 3px rgba(0, 0, 0, 0.12); --action-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.1); --action-shadow-large: 0 10px 25px rgba(0, 0, 0, 0.15); --action-shadow-xl: 0 20px 40px rgba(0, 0, 0, 0.2); } /* 基础重置 */ .action-component * { box-sizing: border-box; } /* 弹窗遮罩 */ .action-mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.45); z-index: 1000; display: flex; align-items: center; justify-content: center; animation: actionFadeIn 0.3s ease-out; } .action-mask.closing { animation: actionFadeOut 0.3s ease-out; } /* 弹窗容器 */ .action-dialog { background: var(--action-background); border-radius: var(--action-border-radius-lg); box-shadow: var(--action-shadow); max-width: 90vw; max-height: 90vh; overflow: hidden; animation: actionSlideIn 0.3s ease-out; position: relative; } .action-dialog.closing { animation: actionSlideOut 0.3s ease-out; } /* 弹窗头部 */ .action-dialog-header { padding: var(--action-padding) var(--action-padding) 0; border-bottom: 1px solid var(--action-border); margin-bottom: var(--action-padding); } .action-dialog-title { font-size: 16px; font-weight: 600; color: var(--action-text); margin: 0; padding-bottom: var(--action-padding-sm); } /* 弹窗内容 */ .action-dialog-content { padding: 0 var(--action-padding); max-height: 60vh; overflow-y: auto; overflow-x: hidden; } /* 弹窗底部 */ .action-dialog-footer { padding: var(--action-padding); border-top: 1px solid var(--action-border); margin-top: var(--action-padding); display: flex; justify-content: flex-end; gap: var(--action-margin); } /* 关闭按钮 */ .action-dialog-close { position: absolute; top: var(--action-padding-sm); right: var(--action-padding-sm); width: 32px; height: 32px; border: none; background: transparent; cursor: pointer; border-radius: var(--action-border-radius-sm); display: flex; align-items: center; justify-content: center; color: var(--action-text-secondary); transition: var(--action-transition-fast); } .action-dialog-close:hover { background: var(--action-background-light); color: var(--action-text); } /* 按钮样式 */ .action-button { padding: var(--action-padding-sm) var(--action-padding); border: 1px solid var(--action-border); border-radius: var(--action-border-radius); background: var(--action-background); color: var(--action-text); cursor: pointer; font-size: 14px; line-height: 1.5; transition: var(--action-transition); display: inline-flex; align-items: center; justify-content: center; min-width: 80px; user-select: none; } .action-button:hover { border-color: var(--action-border-hover); color: var(--action-primary); } .action-button:active { transform: translateY(1px); } .action-button:disabled { background: var(--action-background-disabled); border-color: var(--action-border); color: var(--action-text-disabled); cursor: not-allowed; } .action-button-primary { background: var(--action-primary); border-color: var(--action-primary); color: white; } .action-button-primary:hover { background: var(--action-primary-hover); border-color: var(--action-primary-hover); color: white; } .action-button-primary:active { background: var(--action-primary-active); border-color: var(--action-primary-active); } .action-button-danger { background: var(--action-error); border-color: var(--action-error); color: white; } .action-button-danger:hover { background: #ff4d4f; border-color: #ff4d4f; color: white; } /* 输入框样式 */ .action-input { width: 100%; padding: var(--action-padding-sm) 12px; border: 1px solid var(--action-border); border-radius: var(--action-border-radius); font-size: 14px; line-height: 1.5; color: var(--action-text); background: var(--action-background); transition: var(--action-transition); } .action-input:focus { border-color: var(--action-primary); outline: none; box-shadow: var(--action-shadow-active); } .action-input:disabled { background: var(--action-background-disabled); color: var(--action-text-disabled); cursor: not-allowed; } .action-input.error { border-color: var(--action-error); } .action-input.error:focus { box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); } /* 文本域样式 */ .action-textarea { resize: vertical; min-height: 80px; font-family: inherit; } /* 标签样式 */ .action-label { display: block; margin-bottom: var(--action-margin-sm); font-size: 14px; font-weight: 500; color: var(--action-text); } .action-label.required::after { content: ' *'; color: var(--action-error); } /* 提示文本样式 */ .action-tip { font-size: 12px; color: var(--action-text-secondary); margin-top: var(--action-margin-sm); line-height: 1.4; } .action-tip.error { color: var(--action-error); } /* 表单项样式 */ .action-form-item { margin-bottom: var(--action-padding); } .action-form-item:last-child { margin-bottom: 0; } /* 选项样式 */ .action-option { padding: 12px; border: 1px solid var(--action-border); border-radius: var(--action-border-radius); cursor: pointer; transition: var(--action-transition); background: var(--action-background); margin-bottom: var(--action-margin); display: flex; align-items: center; user-select: none; } .action-option:hover { background: var(--action-background-light); border-color: var(--action-primary); } .action-option.selected { background: var(--action-primary); border-color: var(--action-primary); color: white; } .action-option.disabled { background: var(--action-background-disabled); color: var(--action-text-disabled); cursor: not-allowed; } /* 选项网格布局 */ .action-options-grid { display: grid; gap: var(--action-margin); } .action-options-grid.columns-1 { grid-template-columns: 1fr; } .action-options-grid.columns-2 { grid-template-columns: repeat(2, 1fr); } .action-options-grid.columns-3 { grid-template-columns: repeat(3, 1fr); } .action-options-grid.columns-4 { grid-template-columns: repeat(4, 1fr); } /* 复选框样式 */ .action-checkbox { width: 16px; height: 16px; margin-right: var(--action-margin); accent-color: var(--action-primary); } /* 图片样式 */ .action-image { max-width: 100%; height: auto; border-radius: var(--action-border-radius); margin: var(--action-margin) 0; cursor: pointer; transition: var(--action-transition); } .action-image:hover { transform: scale(1.02); box-shadow: var(--action-shadow-hover); } /* 二维码样式 */ .action-qrcode { text-align: center; margin: var(--action-padding) 0; } .action-qrcode img { border: 1px solid var(--action-border); border-radius: var(--action-border-radius); } /* WebView样式 */ .action-webview { width: 100%; border: 1px solid var(--action-border); border-radius: var(--action-border-radius); background: var(--action-background); } /* 加载状态 */ .action-loading { display: flex; align-items: center; justify-content: center; padding: var(--action-padding-lg); color: var(--action-text-secondary); } .action-loading::before { content: ''; width: 20px; height: 20px; border: 2px solid var(--action-border); border-top-color: var(--action-primary); border-radius: 50%; animation: actionSpin 1s linear infinite; margin-right: var(--action-margin); } /* 错误状态 */ .action-error { padding: var(--action-padding); background: #fff2f0; border: 1px solid #ffccc7; border-radius: var(--action-border-radius); color: var(--action-error); margin: var(--action-margin) 0; } /* 成功状态 */ .action-success { padding: var(--action-padding); background: #f6ffed; border: 1px solid #b7eb8f; border-radius: var(--action-border-radius); color: var(--action-success); margin: var(--action-margin) 0; } /* 快速选择 */ .action-quick-select { display: flex; flex-wrap: wrap; gap: var(--action-margin-sm); margin-top: var(--action-margin); } .action-quick-select-item { padding: 4px var(--action-margin); background: var(--action-background-light); border: 1px solid var(--action-border); border-radius: var(--action-border-radius-sm); cursor: pointer; font-size: 12px; transition: var(--action-transition-fast); } .action-quick-select-item:hover { background: var(--action-primary); border-color: var(--action-primary); color: white; } /* 帮助文本 */ .action-help { background: #f0f9ff; border: 1px solid #91d5ff; border-radius: var(--action-border-radius); padding: var(--action-padding-sm); margin-top: var(--action-margin); font-size: 12px; color: #1890ff; line-height: 1.4; } /* 响应式设计 */ @media (max-width: 768px) { .action-dialog { margin: var(--action-padding); max-width: calc(100vw - 32px); } .action-options-grid.columns-3, .action-options-grid.columns-4 { grid-template-columns: repeat(2, 1fr); } .action-dialog-footer { flex-direction: column-reverse; } .action-button { width: 100%; } } @media (max-width: 480px) { .action-options-grid.columns-2, .action-options-grid.columns-3, .action-options-grid.columns-4 { grid-template-columns: 1fr; } } /* 动画定义 */ @keyframes actionFadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes actionFadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes actionSlideIn { from { opacity: 0; transform: scale(0.9) translateY(-20px); } to { opacity: 1; transform: scale(1) translateY(0); } } @keyframes actionSlideOut { from { opacity: 1; transform: scale(1) translateY(0); } to { opacity: 0; transform: scale(0.9) translateY(-20px); } } @keyframes actionSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* 滚动条样式 */ .action-dialog-content::-webkit-scrollbar { width: 6px; } .action-dialog-content::-webkit-scrollbar-track { background: var(--action-background-light); border-radius: 3px; } .action-dialog-content::-webkit-scrollbar-thumb { background: var(--action-border); border-radius: 3px; } .action-dialog-content::-webkit-scrollbar-thumb:hover { background: var(--action-text-secondary); }