Parcourir la source

feat: 用户列表新增锁定状态筛选,便于快速查找锁定用户

admin-web 与 admin-h5 用户列表共用 /custom/listUser,新增 locked 参数,按 t_user.lock_notice 判断当前锁定状态(解锁时会清空)。
skyline il y a 3 semaines
Parent
commit
484b408f6c

+ 48 - 0
admin-h5/src/pages/user/list.vue

@@ -10,6 +10,18 @@
       <button class="refund-nav-btn" @click="navigateToRefund">退款处理</button>
     </view>
 
+    <!-- 锁定状态筛选 -->
+    <view class="filter-bar">
+      <view
+        v-for="option in lockOptions"
+        :key="option.label"
+        class="filter-item"
+        :class="{ active: lockFilter === option.value }"
+        @click="handleLockFilterChange(option.value)">
+        <text>{{ option.label }}</text>
+      </view>
+    </view>
+
     <!-- 用户列表 -->
     <view class="user-list" v-if="list.length > 0">
       <view class="user-item" v-for="(item, index) in list" :key="index">
@@ -234,6 +246,12 @@ const pageSize = ref(10)
 const hasMore = ref(true)
 const loadMoreStatus = ref('more')
 const searchKeyword = ref('')
+const lockFilter = ref('')
+const lockOptions = [
+  { label: '全部', value: '' },
+  { label: '已锁定', value: 1 },
+  { label: '未锁定', value: 0 }
+]
 const showRefundModal = ref(false)
 const refundUser = ref(null)
 const refundReason = ref('')
@@ -269,6 +287,7 @@ const loadData = async (isLoadMore = false) => {
       pageSize: pageSize.value
     }
     if (searchKeyword.value) params.mobilePhone = searchKeyword.value
+    if (lockFilter.value !== '') params.locked = lockFilter.value
 
     const res = await getAppUserList(params)
     if (res && res.code === 200) {
@@ -309,6 +328,12 @@ const handleSearch = () => {
   loadData()
 }
 
+const handleLockFilterChange = (value) => {
+  if (lockFilter.value === value) return
+  lockFilter.value = value
+  loadData()
+}
+
 const navigateToRefund = () => {
   uni.navigateTo({ url: '/pages/finance/refund' })
 }
@@ -491,6 +516,29 @@ onMounted(async () => {
   transform: scale(0.97);
 }
 
+.filter-bar {
+  display: flex;
+  align-items: center;
+  gap: 16rpx;
+  padding: 12rpx 20rpx;
+  background-color: #FFFFFF;
+}
+
+.filter-item {
+  padding: 8rpx 24rpx;
+  background-color: #F5F5F5;
+  border-radius: 100rpx;
+  font-size: 24rpx;
+  color: #666666;
+  flex-shrink: 0;
+  white-space: nowrap;
+}
+
+.filter-item.active {
+  background: #C6171E;
+  color: #FFFFFF;
+}
+
 .user-list {
   padding: 20rpx;
 }

+ 4 - 0
admin-web/src/views/admin/account/index.vue

@@ -62,6 +62,10 @@
             data-key="list"
             clearable
             class="wd200 ml10"/>
+        <el-select v-model="state.formQuery.locked" placeholder="锁定状态" clearable class="wd150 ml10">
+          <el-option label="已锁定" :value="1"/>
+          <el-option label="未锁定" :value="0"/>
+        </el-select>
 <!--        <ext-d-select-->
 <!--            v-model="state.formQuery.status"-->
 <!--            placeholder="状态"-->

+ 4 - 0
car-wash-entity/src/main/java/com/kym/entity/queryParams/CommonQueryParam.java

@@ -45,6 +45,10 @@ public class CommonQueryParam extends PageParams {
      * 状态
      */
     private Object status;
+    /**
+     * 锁定状态:1-已锁定,0-未锁定,为空表示不限
+     */
+    private Integer locked;
     /**
      * 商户订单号
      */

+ 3 - 0
car-wash-service/src/main/java/com/kym/service/impl/UserServiceImpl.java

@@ -300,6 +300,9 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
                 .eq(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), User::getMobilePhone, params.getMobilePhone())
                 .eq(CommUtil.isNotEmptyAndNull(params.getStationId()), User::getStationId, params.getStationId())
                 .eq(CommUtil.isNotEmptyAndNull(params.getStatus()), User::getStatus, params.getStatus())
+                // t_user 上的 lock_notice 仅表示当前锁定状态,解锁时会被清空
+                .isNotNull(params.getLocked() != null && params.getLocked() == 1, User::getLockNotice)
+                .isNull(params.getLocked() != null && params.getLocked() == 0, User::getLockNotice)
                 .list().stream().map(User::getId)
                 .toList();
         if (CommUtil.isEmptyOrNull(userIds)) {