瀏覽代碼

站点白名单

skyline 2 月之前
父節點
當前提交
637b531f73

+ 1 - 1
admin-web/src/views/admin/whitelist/batch.vue

@@ -149,7 +149,7 @@ const handleSearchUser = () => {
     return;
   }
   state.searchLoading = true;
-  $get(`/account/list`, { mobilePhone: state.searchPhone, pageNum: 1, pageSize: 50 }).then((res: any) => {
+  $get(`/custom/simpleList`, { mobilePhone: state.searchPhone, pageNum: 1, pageSize: 50 }).then((res: any) => {
     let { list } = res;
     state.searchResult = list || [];
     state.searchLoading = false;

+ 88 - 1
admin-web/src/views/admin/whitelist/config.vue

@@ -72,6 +72,11 @@
           <SvgIcon name="ele-Search"/>
           查询
         </el-button>
+
+        <el-button v-auth="'station.whitelist.config.modify'" size="default" plain type="primary" class="ml10" @click="onAddConfig">
+          <SvgIcon name="ele-Plus"/>
+          添加配置
+        </el-button>
       </el-form>
 
       <el-table
@@ -112,6 +117,9 @@
               <el-button v-auth="'station.whitelist.list'" size="small" plain type="primary" @click="handleManageWhitelist(row)">
                 管理白名单
               </el-button>
+              <el-button v-auth="'station.whitelist.config.delete'" size="small" plain type="danger" @click="onRowDel(row)">
+                删除
+              </el-button>
             </template>
             <template v-else>
               <div>{{ row[field.prop] }}</div>
@@ -120,12 +128,45 @@
         </el-table-column>
       </el-table>
     </el-card>
+
+    <el-dialog
+        v-model="state.dialog.isShowDialog"
+        title="添加白名单配置"
+        width="500px"
+        append-to-body
+        destroy-on-close>
+      <el-form label-width="100px" class="mt20">
+        <el-form-item label="选择站点" required>
+          <ext-select
+              v-model="state.dialog.stationId"
+              placeholder="请选择站点"
+              url="station/listStation"
+              urlMethod="get"
+              data-key=""
+              label-key="stationName"
+              value-key="stationId"
+              clearable
+              class="w100">
+          </ext-select>
+        </el-form-item>
+        <el-form-item label="初始状态">
+          <el-tag type="success">启用</el-tag>
+          <span class="ml10 text-gray">添加后默认启用白名单功能</span>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="onClose">取消</el-button>
+          <el-button type="primary" @click="onSubmit">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup lang="ts" name="StationWhitelistConfigList">
 import { reactive, onMounted, ref, nextTick } from 'vue';
-import { $body, $get, $put } from "/@/utils/request";
+import { $body, $get, $put, $delete } from "/@/utils/request";
 import { Msg } from "/@/utils/message";
 import ExtSelect from "/@/components/form/ExtSelect.vue";
 import { useRouter } from 'vue-router';
@@ -151,6 +192,10 @@ const state = reactive({
         label: '操作', prop: 'action', width: 150, align: 'center', fixed: 'right',
       }
     ],
+  },
+  dialog: {
+    isShowDialog: false,
+    stationId: ''
   }
 })
 
@@ -191,4 +236,46 @@ const handleManageWhitelist = (row: any) => {
     query: { stationId: row.stationId }
   });
 };
+
+const onAddConfig = () => {
+  state.dialog.stationId = '';
+  state.dialog.isShowDialog = true;
+};
+
+const onClose = () => {
+  state.dialog.isShowDialog = false;
+  state.dialog.stationId = '';
+};
+
+const onSubmit = () => {
+  if (!state.dialog.stationId) {
+    Msg.message('请选择站点', 'warning');
+    return;
+  }
+  // 检查是否已存在配置
+  const exists = state.tableData.data.some((item: any) => item.stationId === state.dialog.stationId);
+  if (exists) {
+    Msg.message('该站点已存在白名单配置', 'warning');
+    return;
+  }
+  
+  $put(`/station-whitelist/config/update?stationId=${state.dialog.stationId}&enabled=1`).then(() => {
+    Msg.message('添加成功', 'success');
+    loadData(true);
+    onClose();
+  }).catch(() => {
+    Msg.message('添加失败', 'error');
+  });
+};
+
+const onRowDel = (row: any) => {
+  Msg.confirm(`确定要删除站点『${row.stationName}』的白名单配置吗?删除后将清空该站点的所有白名单用户。`).then(() => {
+    $delete(`/station-whitelist/config/delete/${row.stationId}`).then(() => {
+      Msg.message("删除成功", 'success');
+      loadData(true);
+    }).catch(() => {
+      Msg.message("删除失败", 'error');
+    })
+  });
+};
 </script>

+ 1 - 1
admin-web/src/views/admin/whitelist/dialog.vue

@@ -154,7 +154,7 @@ const handleUserSearch = (query: string) => {
   if (!query || query.length < 4) {
     return;
   }
-  $get(`/account/list`, { mobilePhone: query, pageNum: 1, pageSize: 20 }).then((res: any) => {
+  $get(`/custom/simpleList`, { mobilePhone: query, pageNum: 1, pageSize: 20 }).then((res: any) => {
     let { list } = res;
     state.userList = list.map((k: any) => {
       return { value: k.id, label: `${k.mobilePhone} (${k.nickname || '未设置昵称'})` }

+ 0 - 31
admin/src/main/java/com/kym/admin/controller/AccountController.java

@@ -1,31 +0,0 @@
-package com.kym.admin.controller;
-
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.dev33.satoken.annotation.SaMode;
-import com.kym.common.R;
-import com.kym.common.annotation.SysLog;
-import com.kym.common.controller.IController;
-import com.kym.entity.admin.queryParams.CommonQueryParam;
-import com.kym.service.miniapp.UserService;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/account")
-public class AccountController extends IController {
-
-    private final UserService userService;
-
-    public AccountController(UserService userService) {
-        this.userService = userService;
-    }
-
-    @GetMapping("/list")
-    @SaCheckPermission(value = {"account.list", "station.whitelist.add"}, mode = SaMode.OR)
-    @SysLog("查询用户列表(简略)")
-    public R<?> list(@ModelAttribute CommonQueryParam params) {
-        return R.success(userService.listSimpleUser(params));
-    }
-}

+ 7 - 0
admin/src/main/java/com/kym/admin/controller/CustomController.java

@@ -1,6 +1,7 @@
 package com.kym.admin.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaMode;
 import com.kym.common.R;
 import com.kym.common.annotation.SysLog;
 import com.kym.entity.admin.queryParams.CommonQueryParam;
@@ -63,4 +64,10 @@ public class CustomController {
         return R.success(payLogService.listRecharge(params));
     }
 
+    @GetMapping("/simpleList")
+    @SaCheckPermission(value = {"account.list", "station.whitelist.add"}, mode = SaMode.OR)
+    @SysLog("查询用户列表(简略)")
+    public R<?> listSimple(@ModelAttribute CommonQueryParam params) {
+        return R.success(customUserService.listSimpleUser(params));
+    }
 }

+ 8 - 0
admin/src/main/java/com/kym/admin/controller/StationWhitelistController.java

@@ -98,6 +98,14 @@ public class StationWhitelistController extends IController {
         return R.success();
     }
 
+    @DeleteMapping("/config/delete/{stationId}")
+    @SaCheckPermission("station.whitelist.config.delete")
+    @SysLog("站点白名单配置-删除配置")
+    public R<?> deleteConfig(@PathVariable String stationId) {
+        stationWhitelistConfigService.deleteConfig(stationId);
+        return R.success();
+    }
+
     @PostMapping("/refreshCache/{stationId}")
     @SaCheckPermission("station.whitelist.modify")
     @SysLog("站点白名单-刷新缓存")

+ 2 - 0
service/src/main/java/com/kym/service/admin/StationWhitelistConfigService.java

@@ -14,6 +14,8 @@ public interface StationWhitelistConfigService extends MPJBaseService<StationWhi
 
     void updateConfig(String stationId, Integer enabled);
 
+    void deleteConfig(String stationId);
+
     boolean isWhitelistEnabled(String stationId);
 
     void refreshConfigCache();

+ 28 - 0
service/src/main/java/com/kym/service/admin/impl/StationWhitelistConfigServiceImpl.java

@@ -8,6 +8,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.IDGenerator;
 import com.kym.entity.admin.Station;
+import com.kym.entity.admin.StationWhitelist;
 import com.kym.entity.admin.StationWhitelistConfig;
 import com.kym.entity.admin.vo.StationWhitelistConfigVo;
 import com.kym.entity.common.RedisKeys;
@@ -15,6 +16,7 @@ import com.kym.mapper.admin.StationWhitelistConfigMapper;
 import com.kym.service.admin.StationService;
 import com.kym.service.admin.StationWhitelistConfigService;
 import com.kym.service.admin.StationWhitelistLogService;
+import com.kym.service.admin.StationWhitelistService;
 import jakarta.annotation.PostConstruct;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
@@ -31,15 +33,18 @@ public class StationWhitelistConfigServiceImpl extends MPJBaseServiceImpl<Statio
     private final IDGenerator idGenerator = new IDGenerator();
     private final StationWhitelistConfigMapper stationWhitelistConfigMapper;
     private final StationService stationService;
+    private final StationWhitelistService stationWhitelistService;
     private final StationWhitelistLogService stationWhitelistLogService;
     private final StringRedisTemplate redisTemplate;
 
     public StationWhitelistConfigServiceImpl(StationWhitelistConfigMapper stationWhitelistConfigMapper,
                                               StationService stationService,
+                                              StationWhitelistService stationWhitelistService,
                                               StationWhitelistLogService stationWhitelistLogService,
                                               StringRedisTemplate redisTemplate) {
         this.stationWhitelistConfigMapper = stationWhitelistConfigMapper;
         this.stationService = stationService;
+        this.stationWhitelistService = stationWhitelistService;
         this.stationWhitelistLogService = stationWhitelistLogService;
         this.redisTemplate = redisTemplate;
     }
@@ -102,6 +107,29 @@ public class StationWhitelistConfigServiceImpl extends MPJBaseServiceImpl<Statio
         stationWhitelistLogService.logConfigChange(stationId, station.getStationName(), enabled, operatorId, operatorName);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteConfig(String stationId) {
+        CommUtil.assertsNonNull(stationId, "站点ID不能为空");
+        
+        lambdaUpdate().eq(StationWhitelistConfig::getStationId, stationId).remove();
+        
+        // 删除该站点的所有白名单用户
+        stationWhitelistService.lambdaUpdate()
+                .eq(StationWhitelist::getStationId, stationId)
+                .remove();
+        
+        String key = RedisKeys.STATION_WHITELIST_CONFIG + stationId;
+        redisTemplate.delete(key);
+        
+        // 清除白名单用户缓存
+        stationWhitelistService.refreshCache(stationId);
+        
+        Long operatorId = StpUtil.getLoginIdAsLong();
+        String operatorName = StpUtil.getSession().getString("mobilePhone");
+        // 这里可以记录日志,如果需要的话
+    }
+
     @Override
     public boolean isWhitelistEnabled(String stationId) {
         String key = RedisKeys.STATION_WHITELIST_CONFIG + stationId;