feat(userManagement): 用户管理新增空态与同步进度弹框组件

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
17792275749
2026-08-19 15:58:28 +08:00
co-authored by Claude Opus 4.7
parent 9040fc4fba
commit 3e0d260fdc
8 changed files with 443 additions and 331 deletions
@@ -1,312 +1,307 @@
.userManagement {
width: 100%;
min-height: 100%;
padding: 24rpx 30rpx;
box-sizing: border-box;
height: 100%;
display: flex;
flex-direction: column;
/* 设备卡片 */
.device-card {
/* 顶部固定区 */
.header {
width: 100%;
padding: 30rpx;
display: flex;
flex-wrap: nowrap;
border-radius: 24rpx;
background-color: #FFFFFF;
padding: 24rpx 30rpx 0;
box-sizing: border-box;
margin-bottom: 32rpx;
margin-bottom: 24rpx;
.device-icon {
width: 88rpx;
height: 88rpx;
overflow: hidden;
margin-right: 24rpx;
.device-card {
width: 100%;
padding: 32rpx;
border-radius: 24rpx;
background-color: #1385FA;
}
background-color: #FFFFFF;
box-sizing: border-box;
margin-bottom: 24rpx;
display: flex;
align-items: center;
.device-info {
flex: 1;
.device-icon {
width: 88rpx;
height: 88rpx;
overflow: hidden;
margin-right: 24rpx;
border-radius: 24rpx;
background-color: #1385FA;
flex-shrink: 0;
}
.device-name-row {
width: 100%;
height: 40rpx;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 14rpx;
.device-info {
flex: 1;
.device-name {
color: #252535;
height: 40rpx;
font-size: 32rpx;
font-weight: bolder;
line-height: 40rpx;
}
.device-status {
height: 40rpx;
padding: 0 16rpx;
.device-name-row {
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
border-radius: 20rpx;
background-color: #EAFAF6;
justify-content: space-between;
margin-bottom: 16rpx;
.status-dot {
width: 12rpx;
height: 12rpx;
margin-right: 8rpx;
border-radius: 50%;
background-color: #2AC79F;
.device-name {
color: #252535;
height: 32rpx;
font-size: 32rpx;
line-height: 32rpx;
}
.status-text {
color: #2AC79F;
.device-status {
height: 22rpx;
display: flex;
align-items: center;
.status-dot {
width: 12rpx;
height: 12rpx;
border-radius: 50%;
background-color: #2AC79F;
margin-right: 8rpx;
}
.status-text {
color: #2AC79F;
height: 22rpx;
font-size: 22rpx;
line-height: 22rpx;
}
}
}
.device-meta {
color: #808080;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
margin-bottom: 8rpx;
}
}
}
.section-header {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16rpx;
.section-title {
color: #252535;
height: 32rpx;
font-size: 32rpx;
line-height: 32rpx;
}
.sync-btn {
height: 48rpx;
padding: 0 20rpx;
border-radius: 24rpx;
background-color: #1385FA;
color: #FFFFFF;
font-size: 24rpx;
line-height: 48rpx;
}
}
.sync-tip {
color: #F2994A;
font-size: 24rpx;
line-height: 34rpx;
}
}
/* 用户列表滚动区 */
.body {
flex: 1;
overflow: hidden;
.empty-state {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.empty-img {
width: 193rpx;
height: 138rpx;
}
.empty-text {
color: #B6B6B6;
font-size: 28rpx;
line-height: 42rpx;
text-align: center;
margin-top: 32rpx;
white-space: pre-line;
}
}
.scrollViewContent {
width: 100%;
padding: 0 30rpx;
box-sizing: border-box;
.member-card {
width: 100%;
padding: 32rpx;
border-radius: 24rpx;
background-color: #FFFFFF;
box-sizing: border-box;
margin-bottom: 24rpx;
display: flex;
align-items: center;
.member-avatar {
width: 88rpx;
height: 88rpx;
border-radius: 24rpx;
margin-right: 24rpx;
flex-shrink: 0;
}
.member-avatar--male {
background-color: #C6E6FF;
}
.member-avatar--female {
background-color: #FFD5E3;
}
.member-info {
flex: 1;
.member-name-row {
display: flex;
align-items: center;
margin-bottom: 16rpx;
.member-name {
color: #252535;
height: 32rpx;
font-size: 32rpx;
line-height: 32rpx;
margin-right: 16rpx;
}
.member-type-tag {
height: 40rpx;
padding: 0 10rpx;
font-size: 24rpx;
line-height: 40rpx;
border-radius: 8rpx;
color: #FFFFFF;
}
.member-type-tag--self {
background-color: #1385FA;
}
.member-type-tag--employee {
background-color: #10B981;
}
.member-type-tag--family {
background-color: #F59E0B;
}
}
.member-sub {
color: #808080;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
}
}
.member-right {
display: flex;
flex-direction: column;
align-items: flex-end;
.member-sync {
height: 22rpx;
font-size: 22rpx;
line-height: 22rpx;
margin-bottom: 16rpx;
}
.member-sync--done {
color: #2AC79F;
}
.member-sync--pending {
color: #F2994A;
}
.member-sync--deleted {
color: #F24439;
}
.member-ops {
display: flex;
.op-edit {
color: #77849E;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
margin-right: 24rpx;
}
.op-delete {
color: #F24439;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
}
}
}
}
.device-meta {
color: #808080;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
}
}
}
/* 已录入用户 + 同步按钮 */
.section-header {
/* 底部常驻添加用户按钮 */
.footer {
width: 100%;
height: 48rpx;
height: 120rpx;
padding: 0 30rpx;
display: flex;
gap: 15rpx;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
margin-bottom: 16rpx;
box-sizing: border-box;
background-color: #FFFFFF;
box-shadow: 0 2rpx 8rpx 0 rgba(19, 133, 250, 0.06);
.section-title {
color: #252535;
height: 32rpx;
.btn-cancel {
color: #1385FA;
flex: 1;
height: 88rpx;
font-size: 32rpx;
font-weight: bolder;
line-height: 32rpx;
text-align: center;
line-height: 84rpx;
border-radius: 44rpx;
box-sizing: border-box;
border: 2rpx solid #1385FA;
background-color: #FFFFFF;
}
.sync-btn {
.btn-primary {
color: #FFFFFF;
height: 48rpx;
font-size: 24rpx;
padding: 0 16rpx;
line-height: 48rpx;
border-radius: 8rpx;
flex: 1;
height: 88rpx;
font-size: 32rpx;
font-weight: bold;
text-align: center;
line-height: 88rpx;
border-radius: 44rpx;
background-color: #1385FA;
}
}
/* 同步提示 */
.sync-tip {
color: #F2994A;
font-size: 24rpx;
line-height: 34rpx;
margin-bottom: 24rpx;
}
/* 用户卡片 */
.member-card {
width: 100%;
padding: 32rpx;
border-radius: 24rpx;
background-color: #FFFFFF;
box-sizing: border-box;
margin-bottom: 24rpx;
display: flex;
align-items: center;
.member-avatar {
width: 88rpx;
height: 88rpx;
border-radius: 24rpx;
margin-right: 24rpx;
flex-shrink: 0;
}
.member-avatar--male {
background-color: #C6E6FF;
}
.member-avatar--female {
background-color: #FFD5E3;
}
.member-info {
flex: 1;
.member-name-row {
display: flex;
align-items: center;
margin-bottom: 16rpx;
.member-name {
color: #252535;
height: 32rpx;
font-size: 32rpx;
line-height: 32rpx;
margin-right: 16rpx;
}
.member-type-tag {
height: 40rpx;
padding: 0 10rpx;
font-size: 24rpx;
line-height: 40rpx;
border-radius: 8rpx;
color: #FFFFFF;
}
.member-type-tag--self {
background-color: #1385FA;
}
.member-type-tag--employee {
background-color: #10B981;
}
.member-type-tag--family {
background-color: #F59E0B;
}
}
.member-sub {
color: #808080;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
}
}
.member-right {
display: flex;
flex-direction: column;
align-items: flex-end;
.member-sync {
height: 22rpx;
font-size: 22rpx;
line-height: 22rpx;
margin-bottom: 16rpx;
}
.member-sync--done {
color: #2AC79F;
}
.member-sync--pending {
color: #F2994A;
}
.member-sync--deleted {
color: #F24439;
}
.member-ops {
display: flex;
.op-edit {
color: #77849E;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
margin-right: 24rpx;
}
.op-delete {
color: #F24439;
height: 26rpx;
font-size: 26rpx;
line-height: 26rpx;
}
}
}
}
/* 底部添加用户按钮 */
.add-btn {
width: 100%;
height: 96rpx;
border-radius: 48rpx;
background-color: #1385FA;
color: #FFFFFF;
font-size: 36rpx;
line-height: 96rpx;
text-align: center;
margin-top: 8rpx;
}
/* 同步进度弹框 */
.sync-mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(37, 37, 53, 0.6);
z-index: 100;
}
.sync-panel {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 560rpx;
box-sizing: border-box;
background-color: #FFFFFF;
border-radius: 24rpx;
z-index: 101;
display: flex;
flex-direction: column;
align-items: center;
padding: 64rpx 48rpx;
.sync-title {
color: #252535;
height: 32rpx;
font-size: 32rpx;
line-height: 32rpx;
}
.sync-status {
color: #808080;
height: 24rpx;
font-size: 24rpx;
line-height: 24rpx;
margin-top: 24rpx;
}
.sync-percent {
color: #77849E;
height: 24rpx;
font-size: 24rpx;
line-height: 24rpx;
margin-top: 48rpx;
}
.sync-progress {
width: 464rpx;
height: 10rpx;
border-radius: 6rpx;
background-color: #D9D9D9;
margin-top: 16rpx;
overflow: hidden;
.sync-progress-inner {
height: 10rpx;
border-radius: 6rpx;
background-color: #1385FA;
}
}
}
}