Browse Source

fix: resolve Bean name collision between GuideActivityService and ActivityService

- Rename GuideActivityService.activityMapper → guideActivityMapper to avoid
  Spring @Resource name collision with ActivityService.activityMapper
- Rename GuideActivityController.activityService → guideActivityService for consistency
- Fix MessageBox prototype registration in cfc-web
- Add echarts dependency to cfc-web
Sisyphus 2 months ago
parent
commit
6dd5a371d4

+ 9 - 9
cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideActivityController.java

@@ -17,7 +17,7 @@ import java.util.Map;
 public class GuideActivityController {
 
     @Resource
-    private GuideActivityService activityService;
+    private GuideActivityService guideActivityService;
 
     @Operation(summary = "获取活动列表")
     @PostMapping("/list")
@@ -26,9 +26,9 @@ public class GuideActivityController {
         String status = body.get("status") != null ? body.get("status").toString() : null;
         List<GuideActivity> list;
         if (status != null && !status.isEmpty()) {
-            list = activityService.getActivitiesByGuideAndStatus(guideId, status);
+            list = guideActivityService.getActivitiesByGuideAndStatus(guideId, status);
         } else {
-            list = activityService.getActivitiesByGuide(guideId);
+            list = guideActivityService.getActivitiesByGuide(guideId);
         }
         return Result.success(list);
     }
@@ -42,7 +42,7 @@ public class GuideActivityController {
         if (activityId == null) {
             return Result.error("activityId不能为空");
         }
-        GuideActivity activity = activityService.getActivityById(activityId);
+        GuideActivity activity = guideActivityService.getActivityById(activityId);
         if (activity == null) {
             return Result.error("活动不存在");
         }
@@ -53,7 +53,7 @@ public class GuideActivityController {
     @PostMapping("/create")
     public Result<Long> createActivity(@RequestAttribute("userId") Long guideId,
             @RequestBody GuideActivity activity) {
-        Long id = activityService.createActivity(guideId, activity);
+        Long id = guideActivityService.createActivity(guideId, activity);
         return Result.success(id);
     }
 
@@ -64,7 +64,7 @@ public class GuideActivityController {
         if (activity.getId() == null) {
             return Result.error("activityId不能为空");
         }
-        activityService.updateActivity(guideId, activity);
+        guideActivityService.updateActivity(guideId, activity);
         return Result.success(true);
     }
 
@@ -77,7 +77,7 @@ public class GuideActivityController {
         if (activityId == null) {
             return Result.error("activityId不能为空");
         }
-        activityService.updateStatus(activityId, "published");
+        guideActivityService.updateStatus(activityId, "published");
         return Result.success(true);
     }
 
@@ -90,7 +90,7 @@ public class GuideActivityController {
         if (activityId == null) {
             return Result.error("activityId不能为空");
         }
-        activityService.updateStatus(activityId, "cancelled");
+        guideActivityService.updateStatus(activityId, "cancelled");
         return Result.success(true);
     }
 
@@ -103,7 +103,7 @@ public class GuideActivityController {
         if (activityId == null) {
             return Result.error("activityId不能为空");
         }
-        activityService.deleteActivity(activityId);
+        guideActivityService.deleteActivity(activityId);
         return Result.success(true);
     }
 }

+ 9 - 9
cfc-backend/src/main/java/com/etotem/cfc/service/GuideActivityService.java

@@ -13,18 +13,18 @@ import java.util.List;
 public class GuideActivityService {
 
     @Resource
-    private GuideActivityMapper activityMapper;
+    private GuideActivityMapper guideActivityMapper;
 
     public List<GuideActivity> getActivitiesByGuide(Long guideId) {
-        return activityMapper.selectByGuideId(guideId);
+        return guideActivityMapper.selectByGuideId(guideId);
     }
 
     public List<GuideActivity> getActivitiesByGuideAndStatus(Long guideId, String status) {
-        return activityMapper.selectByGuideIdAndStatus(guideId, status);
+        return guideActivityMapper.selectByGuideIdAndStatus(guideId, status);
     }
 
     public GuideActivity getActivityById(Long id) {
-        return activityMapper.selectById(id);
+        return guideActivityMapper.selectById(id);
     }
 
     @Transactional
@@ -34,13 +34,13 @@ public class GuideActivityService {
         activity.setCurrentParticipants(0);
         activity.setCreatedAt(new Date());
         activity.setUpdatedAt(new Date());
-        activityMapper.insert(activity);
+        guideActivityMapper.insert(activity);
         return activity.getId();
     }
 
     @Transactional
     public void updateActivity(Long guideId, GuideActivity activity) {
-        GuideActivity existing = activityMapper.selectById(activity.getId());
+        GuideActivity existing = guideActivityMapper.selectById(activity.getId());
         if (existing == null || !existing.getGuideId().equals(guideId)) {
             return;
         }
@@ -53,16 +53,16 @@ public class GuideActivityService {
         if (activity.getMaxParticipants() != null) existing.setMaxParticipants(activity.getMaxParticipants());
         if (activity.getPrice() != null) existing.setPrice(activity.getPrice());
         existing.setUpdatedAt(new Date());
-        activityMapper.updateById(existing);
+        guideActivityMapper.updateById(existing);
     }
 
     @Transactional
     public void updateStatus(Long activityId, String status) {
-        activityMapper.updateStatus(activityId, status);
+        guideActivityMapper.updateStatus(activityId, status);
     }
 
     @Transactional
     public void deleteActivity(Long activityId) {
-        activityMapper.deleteById(activityId);
+        guideActivityMapper.deleteById(activityId);
     }
 }

+ 32 - 0
cfc-web/package-lock.json

@@ -10,6 +10,7 @@
       "dependencies": {
         "axios": "^1.6.0",
         "core-js": "^3.8.3",
+        "echarts": "^6.1.0",
         "element-ui": "^2.15.13",
         "pnpm": "^11.1.2",
         "vue": "^2.6.14",
@@ -5813,6 +5814,22 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/echarts": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.1.0.tgz",
+      "integrity": "sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "2.3.0",
+        "zrender": "6.1.0"
+      }
+    },
+    "node_modules/echarts/node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "license": "0BSD"
+    },
     "node_modules/editorconfig": {
       "version": "1.0.7",
       "dev": true,
@@ -13475,6 +13492,21 @@
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
+    },
+    "node_modules/zrender": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.1.0.tgz",
+      "integrity": "sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "tslib": "2.3.0"
+      }
+    },
+    "node_modules/zrender/node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+      "license": "0BSD"
     }
   }
 }

+ 1 - 0
cfc-web/package.json

@@ -12,6 +12,7 @@
   "dependencies": {
     "axios": "^1.6.0",
     "core-js": "^3.8.3",
+    "echarts": "^6.1.0",
     "element-ui": "^2.15.13",
     "pnpm": "^11.1.2",
     "vue": "^2.6.14",

+ 7 - 1
cfc-web/src/main.js

@@ -9,7 +9,8 @@ import {
   DropdownMenu, DropdownItem, DatePicker, Upload, Tabs, TabPane,
   Menu, Submenu, MenuItem, Empty, Drawer, Timeline, TimelineItem,
   Progress, Container, Header, Aside, Main, Avatar, Scrollbar, Divider,
-  Tab, Badge, Tree, ColorPicker, Tooltip, Popover
+  Tab, Badge, Tree, ColorPicker, Tooltip, Popover,
+  MessageBox
 } from 'element-ui'
 import 'element-ui/lib/theme-chalk/index.css'
 import { formatPrice, formatPriceWithSymbol, formatRate, formatScore } from './utils/format'
@@ -63,6 +64,11 @@ Vue.use(Tree)
 Vue.use(ColorPicker)
 Vue.use(Tooltip)
 Vue.use(Popover)
+// MessageBox 没有 install 方法,Vue.use(MessageBox) ——这是错误的,不会注册 $confirm
+// 需要手动挂载到 prototype 上
+Vue.prototype.$confirm = MessageBox.confirm
+Vue.prototype.$alert = MessageBox.alert
+Vue.prototype.$prompt = MessageBox.prompt
 
 Vue.prototype.formatPrice = formatPrice
 Vue.prototype.formatPriceWithSymbol = formatPriceWithSymbol

+ 1 - 1
cfc-web/src/views/admin/EnergyRuleManagement.vue

@@ -73,7 +73,7 @@
           <el-input-number v-model="form.priority" :min="0" />
         </el-form-item>
         <el-form-item label="计算公式">
-          <el-input v-model="form.amountFormula" placeholder="可选,如 {{baseAmount}} * {{factor}}" />
+          <el-input v-model="form.amountFormula" placeholder="可选,如 [baseAmount] * [factor]" />
         </el-form-item>
         <el-form-item label="触发条件">
           <el-input v-model="form.conditions" type="textarea" :rows="2" placeholder="JSON 格式触发条件" />