feat(userManagement): 用户列表按本人/员工/家庭用户分组展示
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
97dffd9893
commit
48ac39f0e0
@@ -13,13 +13,12 @@
|
|||||||
|
|
||||||
.device-card {
|
.device-card {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 32rpx;
|
padding: 30rpx;
|
||||||
|
display: flex;
|
||||||
border-radius: 24rpx;
|
border-radius: 24rpx;
|
||||||
background-color: #FFFFFF;
|
background-color: #FFFFFF;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin-bottom: 24rpx;
|
margin-bottom: 24rpx;
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.device-icon {
|
.device-icon {
|
||||||
width: 88rpx;
|
width: 88rpx;
|
||||||
@@ -28,7 +27,6 @@
|
|||||||
margin-right: 24rpx;
|
margin-right: 24rpx;
|
||||||
border-radius: 24rpx;
|
border-radius: 24rpx;
|
||||||
background-color: #1385FA;
|
background-color: #1385FA;
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-info {
|
.device-info {
|
||||||
@@ -36,6 +34,7 @@
|
|||||||
|
|
||||||
.device-name-row {
|
.device-name-row {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 40rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@@ -45,13 +44,17 @@
|
|||||||
color: #252535;
|
color: #252535;
|
||||||
height: 32rpx;
|
height: 32rpx;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
|
font-weight: bolder;
|
||||||
line-height: 32rpx;
|
line-height: 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.device-status {
|
.device-status {
|
||||||
height: 22rpx;
|
height: 40rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
padding: 0 16rpx;
|
||||||
|
border-radius: 20rpx;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
background-color: #EAFAF6;
|
||||||
|
|
||||||
.status-dot {
|
.status-dot {
|
||||||
width: 12rpx;
|
width: 12rpx;
|
||||||
@@ -75,13 +78,13 @@
|
|||||||
height: 26rpx;
|
height: 26rpx;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
line-height: 26rpx;
|
line-height: 26rpx;
|
||||||
margin-bottom: 8rpx;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.section-header {
|
.section-header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 48rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@@ -91,17 +94,18 @@
|
|||||||
color: #252535;
|
color: #252535;
|
||||||
height: 32rpx;
|
height: 32rpx;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
|
font-weight: bolder;
|
||||||
line-height: 32rpx;
|
line-height: 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sync-btn {
|
.sync-btn {
|
||||||
height: 48rpx;
|
|
||||||
padding: 0 20rpx;
|
|
||||||
border-radius: 24rpx;
|
|
||||||
background-color: #1385FA;
|
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
|
height: 48rpx;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
line-height: 48rpx;
|
line-height: 48rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
background-color: #1385FA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,124 +146,166 @@
|
|||||||
|
|
||||||
.scrollViewContent {
|
.scrollViewContent {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0 30rpx;
|
padding: 0 30rpx 30rpx;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.group-title {
|
||||||
|
color: #252535;
|
||||||
|
height: 26rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
line-height: 26rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.member-card {
|
.member-card {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 32rpx;
|
padding: 30rpx;
|
||||||
border-radius: 24rpx;
|
border-radius: 24rpx;
|
||||||
background-color: #FFFFFF;
|
background-color: #FFFFFF;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin-bottom: 24rpx;
|
margin-bottom: 24rpx;
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.member-avatar {
|
.member-top {
|
||||||
width: 88rpx;
|
width: 100%;
|
||||||
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;
|
display: flex;
|
||||||
flex-direction: column;
|
align-items: center;
|
||||||
align-items: flex-end;
|
|
||||||
|
.member-avatar {
|
||||||
|
width: 88rpx;
|
||||||
|
height: 88rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 24rpx;
|
||||||
|
margin-right: 24rpx;
|
||||||
|
|
||||||
|
&.member-avatar--male {
|
||||||
|
background-color: #C6E6FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.member-avatar--female {
|
||||||
|
background-color: #FFD5E3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-info {
|
||||||
|
width: 0;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.member-name-row {
|
||||||
|
width: 100%;
|
||||||
|
height: 36rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 14rpx;
|
||||||
|
|
||||||
|
.member-name {
|
||||||
|
color: #252535;
|
||||||
|
height: 36rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bolder;
|
||||||
|
line-height: 36rpx;
|
||||||
|
margin-right: 16rpx;
|
||||||
|
|
||||||
|
text {
|
||||||
|
color: #808080;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-type-tag {
|
||||||
|
color: #FFFFFF;
|
||||||
|
height: 36rpx;
|
||||||
|
padding: 0 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
line-height: 36rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-type-tag--self {
|
||||||
|
background-color: #1385FA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .member-name {
|
||||||
|
color: #252535;
|
||||||
|
height: 40rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bolder;
|
||||||
|
line-height: 40rpx;
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-sub {
|
||||||
|
color: #808080;
|
||||||
|
height: 26rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
line-height: 26rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.member-sync {
|
.member-sync {
|
||||||
height: 22rpx;
|
height: 22rpx;
|
||||||
font-size: 22rpx;
|
font-size: 22rpx;
|
||||||
line-height: 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;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.op-edit {
|
> view:nth-of-type(1) {
|
||||||
color: #77849E;
|
width: 12rpx;
|
||||||
height: 26rpx;
|
height: 12rpx;
|
||||||
font-size: 26rpx;
|
border-radius: 50%;
|
||||||
line-height: 26rpx;
|
margin-right: 8rpx;
|
||||||
margin-right: 24rpx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.op-delete {
|
> view:nth-of-type(2) {
|
||||||
color: #F24439;
|
height: 22rpx;
|
||||||
height: 26rpx;
|
font-size: 22rpx;
|
||||||
font-size: 26rpx;
|
line-height: 22rpx;
|
||||||
line-height: 26rpx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.member-sync--done {
|
||||||
|
color: #2AC79F;
|
||||||
|
|
||||||
|
> view:nth-of-type(1) {
|
||||||
|
background-color: #2AC79F;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.member-sync--pending {
|
||||||
|
color: #F2994A;
|
||||||
|
|
||||||
|
> view:nth-of-type(1) {
|
||||||
|
background-color: #F2994A;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-divider {
|
||||||
|
width: 100%;
|
||||||
|
height: 2rpx;
|
||||||
|
background-color: #EAECF1;
|
||||||
|
margin: 24rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.member-ops {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
|
||||||
|
.op-edit {
|
||||||
|
color: #77849E;
|
||||||
|
height: 26rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
line-height: 26rpx;
|
||||||
|
margin-right: 60rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.op-delete {
|
||||||
|
color: #F24439;
|
||||||
|
height: 26rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
line-height: 26rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,13 +7,31 @@ Page({
|
|||||||
model: 'BS-A100',
|
model: 'BS-A100',
|
||||||
serial: 'BL2024B00321'
|
serial: 'BL2024B00321'
|
||||||
},
|
},
|
||||||
memberCount: 4,
|
memberCount: 5,
|
||||||
members: [
|
hasData: true,
|
||||||
{ id: 1, name: '张晓敏', gender: '男', age: 36, height: 172, type: '本人', typeClass: 'self', sync: '已同步', syncClass: 'done' },
|
self: {
|
||||||
{ id: 2, name: '李建国', gender: '男', age: 36, height: 182, type: '员工', typeClass: 'employee', sync: '已同步', syncClass: 'done' },
|
name: '张晓敏',
|
||||||
{ id: 3, name: '吉夏', gender: '女', age: 28, height: 165, type: '家庭用户', typeClass: 'family', sync: '未同步', syncClass: 'pending' },
|
gender: '男',
|
||||||
{ id: 4, name: '张雪(他人添加)', gender: '女', age: 32, height: 158, type: '家庭用户', typeClass: 'family', sync: '已同步', syncClass: 'done' },
|
age: 36,
|
||||||
{ id: 5, name: '赵明亮', gender: '男', age: 32, height: 172, type: '员工', typeClass: 'employee', sync: '已删除未同步', syncClass: 'deleted' }
|
height: 172,
|
||||||
|
sync: '已同步',
|
||||||
|
syncClass: 'done'
|
||||||
|
},
|
||||||
|
groups: [
|
||||||
|
{
|
||||||
|
title: '员工',
|
||||||
|
members: [
|
||||||
|
{ id: 2, name: '李建国', gender: '男', age: 36, height: 182, sync: '已同步', syncClass: 'done' },
|
||||||
|
{ id: 5, name: '赵明亮', gender: '男', age: 32, height: 172, sync: '已同步', syncClass: 'done' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '家庭用户',
|
||||||
|
members: [
|
||||||
|
{ id: 3, name: '吉夏', gender: '女', age: 28, height: 165, sync: '已同步', syncClass: 'done' },
|
||||||
|
{ id: 4, name: '张雪', gender: '女', age: 32, height: 158, sync: '未同步', syncClass: 'pending' }
|
||||||
|
]
|
||||||
|
}
|
||||||
],
|
],
|
||||||
syncShow: false,
|
syncShow: false,
|
||||||
syncPercent: 0,
|
syncPercent: 0,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<view class="status-text">{{ device.connected ? '已连接' : '未连接' }}</view>
|
<view class="status-text">{{ device.connected ? '已连接' : '未连接' }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="device-meta">型号:{{ device.model }}</view>
|
<view class="device-meta" style="margin-bottom: 20rpx">型号:{{ device.model }}</view>
|
||||||
<view class="device-meta">设备编号:{{ device.serial }}</view>
|
<view class="device-meta">设备编号:{{ device.serial }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -29,26 +29,55 @@
|
|||||||
|
|
||||||
<!-- 用户列表滚动区 -->
|
<!-- 用户列表滚动区 -->
|
||||||
<view class="body">
|
<view class="body">
|
||||||
<scroll-view scroll-y class="scrollView" wx:if="{{ members.length }}">
|
<scroll-view scroll-y class="scrollView" wx:if="{{ hasData }}">
|
||||||
<view class="scrollViewContent">
|
<view class="scrollViewContent">
|
||||||
<block wx:for="{{ members }}" wx:key="id">
|
<!-- 本人 -->
|
||||||
<view class="member-card">
|
<view class="member-card">
|
||||||
<view class="member-avatar {{ item.gender === '女' ? 'member-avatar--female' : 'member-avatar--male' }}"></view>
|
<view class="member-top">
|
||||||
|
<view class="member-avatar member-avatar--male"></view>
|
||||||
<view class="member-info">
|
<view class="member-info">
|
||||||
<view class="member-name-row">
|
<view class="member-name-row">
|
||||||
<view class="member-name">{{ item.name }}</view>
|
<view class="member-name">{{ self.name }}</view>
|
||||||
<view class="member-type-tag member-type-tag--{{ item.typeClass }}">{{ item.type }}</view>
|
<view class="member-type-tag member-type-tag--self">本人</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="member-sub">{{ item.gender }}·{{ item.age }}岁 丨 {{ item.height }}cm</view>
|
<view class="member-sub">{{ self.gender }}·{{ self.age }}岁 丨 {{ self.height }}cm</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="member-right">
|
<view class="member-sync member-sync--{{ self.syncClass }}">
|
||||||
<view class="member-sync member-sync--{{ item.syncClass }}">{{ item.sync }}</view>
|
<view></view>
|
||||||
|
<view>{{ self.sync }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="member-divider"></view>
|
||||||
|
<view class="member-ops">
|
||||||
|
<view class="op-delete">删除</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 分组 -->
|
||||||
|
<block wx:for="{{ groups }}" wx:key="title" wx:for-item="group">
|
||||||
|
<view class="group-title">{{ group.title }}</view>
|
||||||
|
<block wx:for="{{ group.members }}" wx:key="id" wx:for-item="member">
|
||||||
|
<view class="member-card">
|
||||||
|
<view class="member-top">
|
||||||
|
<view class="member-avatar {{ member.gender === '女' ? 'member-avatar--female' : 'member-avatar--male' }}"></view>
|
||||||
|
<view class="member-info">
|
||||||
|
<view class="member-name-row">
|
||||||
|
<view class="member-name">{{ member.name }} <text>(他人添加)</text></view>
|
||||||
|
</view>
|
||||||
|
<view class="member-sub">{{ member.gender }}·{{ member.age }}岁 丨 {{ member.height }}cm</view>
|
||||||
|
</view>
|
||||||
|
<view class="member-sync member-sync--{{ member.syncClass }}">
|
||||||
|
<view></view>
|
||||||
|
<view>{{ member.sync }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="member-divider"></view>
|
||||||
<view class="member-ops">
|
<view class="member-ops">
|
||||||
<view class="op-edit">编辑</view>
|
<view class="op-edit">编辑</view>
|
||||||
<view class="op-delete">删除</view>
|
<view class="op-delete">删除</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</block>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|||||||
Reference in New Issue
Block a user